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之间无共享,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相反。
前面提到了有分成user-level以及kernel-level,底下就会介绍他们执行时的对应关系。
介绍了thread的概念,可以想像process是一间工厂,thread是工厂中的工人,他们会共用机械等资源,也会保留自身的东西,不过在这种情况下会发生人们争夺同一个机械的问题发生,那就是我们下一篇要讲的,Race Condition。
上一篇 | 下一篇 |
---|---|
CPU Scheduling Algorithm | Deadlock |
4.7 类型转换 实例105 强制转换 实例106 将int 数值自动转型为double 数值 实...
最近有打算写一个功能 FF14官网有新消息发布,bot就会把消息发送到discord主频上 但後来发...
许多高级的无线路由器都具有USB孔,不外乎可以达成几个功能:挂载成网路共用资料夹、共享印表机、透过智...
今天要来进入到生命周期的第二个环节: Updating 更新,继上篇的 Mounting 元件挂载...
在DAY25: 作用域三种类的种类介绍了Nodejs作用域种类,里面要提到了ES5的作用域,但其实现...