-
使用多线程的原因
(1) 一个应用进程中可能发生多种活动,有些活动可能会被阻塞,多线程可以简化程序设计
(2) 线程比进程__轻量__,创建、撤销、转换线程的开销都更小(创建、撤销进程的开销包括分配和回收资源,切换进程的开销包括保存当前进程CPU状态和设置新进程CPU状态,而切换线程只需要保存少量寄存器)
(3) 如果应用中存在大量IO操作,使用多线程可以加快应用程序的执行速度(如果应用程序是计算密集型且为单核处理器,那么多线程就没太大意义)
(4) 多CPU系统中,多线程可以实现并行计算
(5) 有些情况下只能使用多线程
例如,三个活动需要共享一个打开的文件,这个文件的内容放在内存中。由于不同的进程有不同的内存地址空间,所以使用多进程无法实现
-
某个活动的三种实现方式
多线程
有并行性, 阻塞系统调用
单线程进程
无并行性,阻塞系统调用
有限状态机
有并行性,非阻塞系统调用(依靠中断实现)
-
理解进程的一种角度:用某种方法将相关的资源集中在一起
因此, 多个线程可以理解为 它们共享同一个地址空间和其他资源;
多个进程可以理解为 它们共享物理内存、磁盘、打印机和其他资源
-
通过在多个进程之间来回切换,系统制造了不同的顺序进程并行运行的假象;
CPU在线程之间的快速切换,制造了线程并行运行的假象
-
(1) 一个进程中所有线程__共享__的内容
1° 地址空间
2° 全局变量
3° 打开文件
4° 子进程
5° 即将发生的报警
6° 信号与信号处理程序
7° 账户信息
(2) 每个线程中__独立__的内容
1° 程序计数器PC
2° 寄存器
3° 堆栈
4° 状态
-
一个线程可能的状态
1° 运行
2° 就绪
3° 阻塞
4° 终止
-
线程调用的方法
1° 创建 create
2° 结束 exit
3° 等待一个特定的线程退出 join
4° 让出 yield
-
实现线程包的方式
(1) 在用户空间实现
优点:快、可定制性调度算法
缺点:实现阻塞系统调用难、页面故障问题、没有时钟中断无法轮转调度
(2) 在内核实现(Java用的这种)
优点:避免了用户空间实现方式的很多难题
缺点:慢
chapter02_进程与线程_2_线程
最新推荐文章于 2023-11-16 19:46:03 发布