HTML5技术

程序员的自我修养一温故而知新 - 目不识丁(4)

字号+ 作者:H5之家 来源:H5之家 2017-08-03 13:02 我要评论( )

线程的并发执行是由多处理器或操作系统调度来实现的。windows和linux都在内核中提供线程支持,有多处理器或调度来实现并发。用户实际使用线程并不是内核线程,而是存在于用户态的用户线程。用户线程并不一定在操作

线程的并发执行是由多处理器或操作系统调度来实现的。windows和linux都在内核中提供线程支持,有多处理器或调度来实现并发。用户实际使用线程并不是内核线程,而是存在于用户态的用户线程。用户线程并不一定在操作系统内核里对应同等数量的内核线程。对用户来说,如果有三个线程同时执行,可能在内核中只有一个线程。

一对一模型

对于直接支持线程的系统,一对一模型始终是最为简单的模型。一个用户使用的线程就唯一对应一个内核使用的线程,但返回来,一个内核里面的线程在用户态不一定有对应的线程存在。

对于一对一模型,线程之间的并发是真正的并发,一个线程因为某个原因阻塞,并不会影响到其他线程。一对一模型也可以让多线程程序在多处理器的系统上有更好的表现。
一般直接使用API或者系统调用创建的线程均为一对一线程。
一对一线程的两个缺点:

  • 由于许多操作系统限制了内核线程数量,因此一对一线程会让用户的线程数量受到限制。
  • 许多操作系统内核线程调度是,上下文切换的开销较大,导致用户线程的执行效率下降。
  • 多对一模型

    多对一模型将多个用户线程映射到一个内核线程上,线程之间的切换由用户态的代码来进行,相对于一对一模型,多对一模型的线程切换要快速许多。

    多对一模型的问题就是如果一个用户线程阻塞了,那么所有的线程都将无法执行。在多处理系统上,处理器的增多对多对一模型的线程性能不会有明显帮助。多对一模型得到的好处是高效的上下文切换和几乎无限制的线程数量。

    多对多模型

    多对多模型结合了多对一和一对一的特点,将多个用户线程映射到少数但不止一个内核线程上。

    一个用户线程阻塞并不会使得所有的用户线程阻塞。并且对用户线程数量也没有什么限制,在多处理器系统上,多对多模型的线程也能得到一定的性能提升,不过提升的幅度没有一对一模型高。

     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • 程序员招聘感悟 - 灵隐心

      程序员招聘感悟 - 灵隐心

      2017-08-01 09:01

    • net.sz.framework 框架 ORM 消消乐超过亿条数据排行榜分析 天王盖地虎 - 失足程序员

      net.sz.framework 框架 ORM 消消乐超过亿条数据排行榜分析 天王盖地

      2017-07-26 15:00

    • 浅谈程序员该具备的自我修养 - Amedeo

      浅谈程序员该具备的自我修养 - Amedeo

      2017-07-23 08:00

    • 程序员装修指南 - 无知者云

      程序员装修指南 - 无知者云

      2017-07-19 16:00

    网友点评
    i