Day-24 Thread

Thread

tags: IT铁人

虽然前面说CPU在执行程序时,都用process来叙述,不过其实在process中有一条一条的thread,那才是CPU在分配的最小单位。

介绍

所谓的thread,又称为light-weight process,是分配CPU的最小单位。当thread被建立後,每条thread有自己私有的内容,包含:

1.Thread ID
2.Thread state
3.Programming Counter
4.CPU registers
5.Stack
6.Local variables

Kernel也会帮助thread建立TCB,就像是PCB一样。

与process有很大的不同,同一个process内不同的thread彼此共享此一process的:

1."Static" local variables
2.Code Section
3.Data Section(global section)
4.other OS Resources
5.heap memory

以下用图片叙述process跟thread的差异,传统process没有多个thread,称为single-thread。

好处

由於thread执行在process之下,具有以下好处:

  • Responsiveness
    当process下的thread被block,此时CPU可以挑别的可执行的thread继续执行,不会导致整个process被blocked。

  • Resource Sharing
    thread共享同一个process的部分Resource,可以方便执行。

  • Economy
    thread共享code, data section以及other OS Resource,thread的context switch比process的快。

  • Scalability
    同一个process内不同thread可以平行在不同的CPU/core上执行。

与process差异

因为process之间无共享,thread之间会有部分共享,所以两者之间有以下差异。

Process(single thread) Thread
Heavy weight process Light weight process
分配Resource的对象单位 分配CPU Time的对象单位
single-threaded model Multi-threading model
不同process无共享的content 同一process的thread共享部分Resource
process若blocked则整个process就被blocked 只要process内有thread可执行则不会被blocked
creation, context switch, management代价高 代价低
对於Multiprocessors效益发挥差 效益发挥佳

种类

thread跟process一样分成user-level以及kernel-level。

user-level thread由thread library提供相关API,也就是C或是C++最前面需要include的那些library,此作法kernel并不知道有其他新创出来的thread,所以如果执行的thread被blocked,则整个process就被blocked,虽然creation跟management很快,但是就丧失了Scalability。

kernel-level thread代表thread由kernel来负责,此时kernel知道每一条thread,可以适当的分配CPU Time,优缺点与user-level thread相反。

Multi-threading Model

前面提到了有分成user-level以及kernel-level,底下就会介绍他们执行时的对应关系。

  • Many to One Model
    同一process的所有user-level thread对应到一个kernel-level thread,因为只有一个kernel-level thread要向上找user-level thread执行,所以会比较迅速,不过一样会发生前面提到的缺点,也就是thread blocked cause process blocked。

  • One to One Model
    这种模式代表只要有一个user-level thread被建立,就会建立一个kernel-level thread,一对一的对应关系可以达成thread的优点,不过在kernel-level thread太多的时候,就会导致效果变差,CPU会被kernel-level thread稀释掉。

  • Many to Many Model
    这种模式会先固定好kernel-level thread的数量,可能会根据CPU核心数决定,并且往上找需要执行的user-level thread执行,这种作法不但能达到thread的优点,也不会有太多kernel-level thread的问题,只是设计比较复杂而已。

What's Next?

介绍了thread的概念,可以想像process是一间工厂,thread是工厂中的工人,他们会共用机械等资源,也会保留自身的东西,不过在这种情况下会发生人们争夺同一个机械的问题发生,那就是我们下一篇要讲的,Race Condition。

上一篇 下一篇
CPU Scheduling Algorithm Deadlock


<<:  [FGL] 列出树状表所有节点路径的思路与实作

>>:  [Day21] 与问题成员对话-案例三:PIP

[影片]第28天:物件导向程序设计-类型转换(实例109~111)

4.7 类型转换 实例105 强制转换 实例106 将int 数值自动转型为double 数值 实...

[DAY 17]Discord server串接webhook

最近有打算写一个功能 FF14官网有新消息发布,bot就会把消息发送到discord主频上 但後来发...

Day_25 Samba

许多高级的无线路由器都具有USB孔,不外乎可以达成几个功能:挂载成网路共用资料夹、共享印表机、透过智...

[ Day 12 ] React 的生命周期 - Updating

今天要来进入到生命周期的第二个环节: Updating 更新,继上篇的 Mounting 元件挂载...

DAY26: 块作用域

在DAY25: 作用域三种类的种类介绍了Nodejs作用域种类,里面要提到了ES5的作用域,但其实现...