引入线程的原因
一个程序的一次执行成为进程, 但是该程序可能要实现多种功能, 例如qq边和别人打电话边刷朋友圈
而传统的进程只能串行的执行一系列程序, 为此引入 线程, 以增加并发度
引入线程后有哪些变化
以前CPU为进程工作, 进程是最小单位
引入线程后, 线程成为了最小工作单位
引入进程后, 进程 只作为 除了CPU以外的系统资源的分配单元
例如麦克风, 打印机等, 都是被系统分配给某个进程, 而不是某个线程
再如内存地址空间, 也是被分配给进程
但是CPU之前提到了有了线程之后是被分给线程的
所以进程是 除了CPU以外的系统资源的分配的单元
可以理解为某个程序执行过程中产生的各种任务被放入不同的线程以等待处理机执行
资源以进程为单位进行分配, CPU以线程为单位进行任务处理
线程的属性
- 各个线程占用不同的cpu
对于现代的CPU, 通常说几核几线程,
核代表的相当于处理机有多少个
线程代表的可以同时执行多少个**线程数量**
一般情况下, 有多少个处理机就可以同时执行多少个**任务线程**
但是我们经常也有听到12核16线程这种说法
这其实是一种超线程技术, 对于某些核心,
看上去就像将其分成两部分一样地可以同时处理两个任务线程
注意以上 **线程数量**与 **任务线程**这俩名字是我瞎编的, 为的是区分CPU所说的线程与操作系统中处理一些列指令的线程,
如果要了解更多关于超线程的技术, emm我也不知道怎么办, 百度百度, 找找书看吧hhh
-
线程id与线程控制块TCB
类似于进程的PCB -
线程几乎不拥有系统资源
线程拥有的只是处理机, 其他系统资源按照进程分配 -
进程与进程间切换开销 对比 线程与线程间切换开销(同个进程)
之前讲过进程与进程切换时需要对该进程的一些资源进行保存,
然后再载入新进程的资源
而同一个进程间的线程切换则不需要, 因为仍然是之前的那个进程
如果是不同进程的线程切换, 其实仍然属于进程与进程之间的切换, 只不过最终的切换对象是不同进程中的线程