操作系统换之并发这点事儿
[TOC]
并发
桌子上有很多桃子,每个人看到桃子去抓取。这就是并发,他存在的问题是 不同的人会尝试去抓同一个桃子。这么导致后面的人抓不到。
可能的解决办法是大家排队一次拿桃子,这样又会降低效率。
如何又快又不出错的拿桃子,这就是问题所在。实际上,并发比这个更复杂。
线程
进程只有一个指令执行路径,也就是只有一个pc计数器。
线程的引入 增加了指令执行路径。每个线程有自己的指令执行路径,即PC计数器,也有自己独立的寄存器。
但是这些线程又共享地址空间,从而共享代码和数据。
类似于进程间的切换有上下文切换,线程间切换也有上下文切换。
进程是把状态保存到进程控制块 (Process Control Block, PCB)。
线程是把状态保存到线程控制块(Thread Control Block, TCB)。需要注意的是,同一个进程的线程间 本身是共享地址空间的,所以不需要切换当前使用的页表。
因为每个线程都有独立的栈,多线程的引入还影响了地址空间布局。有的应用程序会利用这个特性,譬如Java有ThtreadLocal, 在线程栈里存变量。
线程和进程一样,并不是创建了就马上运行,而是会由操作系统调度。