4 ]6 e& ]9 O. S* j/ W: }5 i1 T这里说的浪费资源指的是资源空闲,没有充分使用的情况。 . j" m. e" c& O! b 0 ^7 H, q* |) D+ k $ R4 m6 A. j/ L2 H操作系统为我们的程序带来了 并发性,操作系统使我们的程序同时运行多个程序,一个程序就是一个进程,也就相当于同时运行了多个进程。 ( T# q- G9 w o" e$ S 5 c: ?- z9 }" O# i: m. H! k N, S# f. [ u+ y
操作系统是一个并发系统,并发性是操作系统非常重要的特征,操作系统具有同时处理和调度多个程序的能力,比如多个 I/O 设备同时在输入输出;设备 I/O 和 CPU 计算同时进行;内存中同时有多个系统和用户程序被启动交替、穿插地执行。操作系统在协调和分配进程的同时,操作系统也会为不同进程分配不同的资源。6 b2 D, |; a' {: D3 q4 r: O6 j% v
0 d2 u3 G& [) v' V4 \ m% j8 q1 D. u# |5 i9 e% h6 b
操作系统实现多个程序同时运行解决了单个程序无法做到的问题,主要有下面三点7 D" `# A1 D" X- C. ?' U4 [% G
6 N+ I) j& B/ _4 f* C
; z, r+ V6 h2 W
资源利用率,我们上面说到,单个进程存在资源浪费的情况,举个例子,当你在为某个文件夹赋予权限的时候,输入程序无法接受外部的输入字符,只能等到权限赋予完毕后才能接受外部输入。综合来讲,就是在等待程序时无法执行其他工作。如果在等待程序的同时可以运行另一个程序,那么将会大大提高资源的利用率。(资源并不会觉得累)因为它不会划水~ 1 r( B, t3 C+ {) v% d1 X5 g公平性,不同的用户和程序对于计算机上的资源有着同样的使用权。一种高效的运行方式是为不同的程序划分时间片使用资源,但是有一点需要注意,操作系统可以决定不同进程的优先级,虽然每个进程都有能够公平享有资源的权利,但是每次前一个进程释放资源后的同时有一个优先级更高的进程抢夺资源,就会造成优先级低的进程无法获得资源,久而久之会导致进程饥饿。 5 I$ h4 }$ O" g' O- K+ ?) w- X便利性,单个进程是无法通信的,通信这一点我认为其实是一种避雷针策略,通信的本质就是信息交换,及时进行信息交换能够避免信息孤岛,做重复性的工作;任何并发能做的事情,顺序编程也能够实现,只不过这种方式效率很低,它是一种 阻塞式 的。$ z! a0 b$ C) [5 n/ _$ L
但是,顺序编程(也称为串行编程)也不是一无是处的,串行编程的优势在于其直观性和简单性,客观来讲,串行编程更适合我们人脑的思考方式,但是我们并不会满足于顺序编程,we want it more!!! 。资源利用率、公平性和便利性促使着进程出现的同时也促使着线程的出现。. J+ _' T4 M" f# J: s% |* d' O
: a: g" L1 y: _9 o+ z3 L/ A7 d9 m! M
如果你还不是很理解进程和线程的区别的话,那么我就以我多年操作系统的经验(吹牛逼,实则半年)来为你解释一下:进程是一个应用程序,而线程是应用程序中的一条顺序流。 ( u$ O t6 W. [; ?9 R: c 3 e; g' E. [2 \0 C t4 j$ d3 W& g$ p- a4 K
- i+ _' y! p! N, f
, R) R# s5 X! ~. {# k * m$ f8 Y# Q% \4 |9 x: @0 X( @5 B # W7 L# X$ x8 f8 b5 H. v1 q P; Q0 ~- h0 O) M