在用户级线程中阻塞

时间:2018-03-06 04:58:58

标签: multithreading operating-system

我对用户级线程阻塞有些困惑。我们知道一个用户级线程阻塞导致整个进程被阻塞,那么为什么“响应性”是多线程的好处之一呢?在Silberschatz“操作系统概念”一书中给出:

  

交互式应用程序中的多线程可能允许程序   即使部分内容被阻止或正在执行,也会继续运行   冗长的操作,从而提高对用户的响应能力。

这仅仅是指内核级线程还是我无法理解的东西?

所以,问题是,当一个用户级线程阻塞导致整个进程被阻塞时,响应能力如何成为线程的优势?

3 个答案:

答案 0 :(得分:2)

  

所以,问题是,当一个用户级线程阻塞导致整个进程被阻塞时,响应能力如何成为线程的优势?

用户级线程仅在两种情况下阻止:

  1. 当他们遇到页面错误或线程库无法处理的其他情况时。

  2. 当整个过程无法取得进展时。

  3. 这是用户级线程实现的主要工作 - 采用通常会阻塞并用非阻塞版本替换它们的函数,以便其他用户级线程可以向前推进。

    这仍然意味着如果任何用户级线程遇到页面错误,整个过程都无法在向页面错误提供服务之前继续前进。

答案 1 :(得分:1)

使用用户级线程,实际线程永远不会阻塞 - 任何可能阻止的操作都会被拦截,而非阻塞等效操作则会被阻止。如果用户级别线程DID阻塞,如你所知,它会无意中阻塞其他线程,这是破坏的。

答案 2 :(得分:0)

  

我对用户级线程阻塞有些困惑。我们知道一个用户级线程阻塞导致整个进程被阻塞,那么为什么“响应性”是多线程的好处之一呢?

仅在某些操作系统上才是这样。

  

所以,问题是,当一个用户级线程阻塞导致整个进程被阻塞时,响应能力如何成为线程的优势?

开发“用户线程”时广泛使用的系统通常会有软件中断,阻止整个线程被阻塞。

现在,任何值得盐的操作系统都有真正的线程,而“用户线程”是时代和操作系统的遗留物,并没有跟上。

相关问题