进程和线程的区别

今天看极客时间的《从0开始学架构》的《高性能》一篇,对于进程和线程的区别又有更深的理解:

  1. 一开始,计算机没有操作系统,只有输入、运算、输出功能,用户输入一个指令,计算机完成操作,计算机大部分时间都在等待用户输入,因为机器运算速度比人手工输入的速度快太多了;

  2. 为了解决这个问题,批处理系统应运而生,把要执行的操作命令预先写下来(写到磁带、纸带等等)形成一个指令清单,即我们说的“任务”。计算机运行的时候就不需要等待,批量处理“任务”中的指令清单;

  3. 批处理大大改进了性能,但是还是有个缺点,计算机一次只能执行一个任务,计算机在读取磁带、纸带的时候,即I/O操作中,CPU就只能空等待。为了解决这个问题,人们发明了“进程”,并采用分时的方式给进程分配CPU时间片从而达到多进程运行的效果,因为CPU执行很快,在用户看来是并行的执行进程;

  4. 进程要求每个任务都有独立的内存空间,进程间互不相关,那就需要解决进程间的通信问题,于是管道、信号量、消息队列、共享存储等就被设计出来了;

  5. 多进程并行处理的时候,其实单个进程内部是串行处理的,而实际上很多进程内部的任务是不需要按照时间顺序严格执行的,这时候线程就出现了。线程是进程内部的子任务,线程间共享同一份进程数据。为了保证数据的正确性,又出现了互斥锁的机制。有了线程之后,线程成为了操作系统调度的最小单位,进程成为了操作系统资源分配的最小单位。

comments powered by Disqus