【问题标题】:Blocking in user-level thread在用户级线程中阻塞
【发布时间】:2018-08-13 21:18:45
【问题描述】:

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

交互式应用程序中的多线程可能允许程序 继续运行,即使它的一部分被阻塞或正在执行 冗长的操作,从而提高对用户的响应速度。

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

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

【问题讨论】:

    标签: multithreading operating-system


    【解决方案1】:

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

    这仅适用于某些操作系统。

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

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

    现在,任何称职的操作系统都有真正的线程,而“用户线程”是时代的遗物,操作系统没有跟上。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        用户级线程只在两种情况下阻塞:

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

        2. 当整个过程无路可走时。

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

        这仍然意味着,如果任何用户级线程遇到页面错误,整个进程将无法向前推进,直到页面错误得到处理。

        【讨论】:

          猜你喜欢
          • 2021-10-29
          • 2017-04-14
          • 2016-03-24
          • 2017-04-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多