一.认识并发几个关键成员
1.计算机的核⼼是CPU,它承担了所有的计算任务。它就像⼀座⼯⼚,时刻在运⾏
2.假定⼯⼚的电⼒有限,⼀次只能供给⼀个⻋间使⽤。也就是说,⼀个⻋间开⼯的时 候,其他⻋间都必须停⼯。背后的含义就是,单个 CPU ⼀次只能运⾏⼀个任务
3.进程就好⽐⼯⼚的⻋间,它代表 CPU 所能处理的单个任务。任⼀时刻,CPU 总 是运⾏⼀个 进程,其他 进程 处于⾮运⾏状态
4..⼀个⻋间⾥,可以有很多⼯⼈。他们协同完成⼀个任务
5.线程 就好⽐⻋间⾥的⼯⼈。⼀个 进程 可以包括多个 线程
6.⻋间的空间是⼯⼈们共享的,⽐如许多房间是每个⼯⼈都可以进出的。这象征⼀个 进程 的内存空间是共享的,每个 线程 都可以使⽤这些共享内存
7.可是,每间房间的⼤⼩不同,有些房间最多只能容纳⼀个⼈,⽐如厕所。⾥⾯有⼈ 的时候,其他⼈就不能进去了。这代表⼀个 线程 使⽤某些共享内存时,其他 线程 必须等它结束,才能使⽤这⼀块内存。
8.⼀个防⽌他⼈进⼊的简单⽅法,就是⻔⼝加⼀把锁。先到的⼈锁上⻔,后到的⼈看 到上锁,就在⻔⼝排队,等锁打开再进去。这就叫 "互斥锁"(Mutual exclusion, 缩写 Mutex),防⽌多个 线程 同时读写某⼀块内存区域
9.还有些房间,可以同时容纳 n 个⼈,⽐如厨房。也就是说,如果⼈数⼤于n,多出 来的⼈只能在外⾯等着。这好⽐某些内存区域,只能供给固定数⽬的 线程 使⽤
10.这时的解决⽅法,就是在⻔⼝挂 n 把钥匙。进去的⼈就取⼀把钥匙,出来时再把 钥匙挂回原处。后到的⼈发现钥匙架空了,就知道必须在⻔⼝排队等着了。这种做 法叫做 "信号量"(Semaphore),⽤来保证多个 线程 不会互相冲突
不难看出,Mutex (互斥锁) 是 Semaphore (信号量)的⼀种特殊情况(n=1时)。也 就是说,完全可以⽤后者替代前者。但是,因为 mutex 较为简单,且效率⾼,所以 在必须保证资源独占的情况下,还是采⽤这种设计
11.操作系统的设计,因此可以归结为三点:
(1)以多 进程 形式,允许多个任务同 时运⾏;
(2)以多 线程 形式,允许单个任务分成不同的部分运⾏;
(3)提供协 调机制,⼀⽅⾯防⽌ 进程 之间和 线程 之间产⽣冲突,另⼀⽅⾯允许 进程 之间和 线 程 之间共享资源
相信看过这之后就了解了并发编程⼤概要关注的⼀些内容了,在后续的⽂章中,希 望⼤家牢记,你是⼀个⼯⼚只能有⼀个⻋间运⾏的负责⼈,如何让⼯⼈⾼效的⼲活 且不出差错,也不起冲突,你就是合格的负责⼈.....