进程和线程
联想一下现实生活中的例子--烧开水,烧开水时是不是不需要在旁边守着,交给热水机完成,烧开水这段时间可以去干一点其他的事情,例如将衣服丢到洗衣机中洗衣服。这样开水烧完,衣服洗的也差不多了。这样既能喝到热水,衣服也差不多了。
在操作系统中,多个程序(如上面的热水器进程和洗衣机进程)同时交替执行,称为进程。
[En]
In the operating system, multiple programs (such as the water heater process and washing machine process above) are executed simultaneously and alternately, which are called * processes.*
那么操作系统为什么需要进程。
通常,操作系统进行IO处理相比计算慢得多
通过Java 进行IO 和 运算测试,IO 的速率大概比运算慢200-400倍
而IO是不需要使用CPU的,这由IO设备完成。而正在运行的程序只能等待IO设备,这样会造成性能瓶颈。所以可以通过切换到其他任务来提高CPU的吞吐率。
以下仅考虑单核情况
那么当遇到IO操作时,操作系统需要切换进程。提醒OS切换的可以是中断,定时器,进程退出等外部事件。
如果有多个任务,应该选择哪一个来运行,这需要 调度器来抉择。
以及如果两个进程需要进行合作例如需要读取检索当前目录并对该目录的文件名进行排序,这称之为进程间的 通信(Inter Process Communication ,IPC)问题。这里只提及一下不做深入研究。
线程的概念和进程的概念很相似,那么有了进程为什么还要线程。
- 首先,每个进程使用不同的地址空间,对于多个进程,多个并行实体可以拥有相同的地址空间。
[En]
first of all, each process uses a different address space, and with multiple processes, multiple parallel entities can have the same address space.*
- 其次,线程比进程更轻,它们更快、更容易创建和更容易撤消。
[En]
secondly, threads are lighter than processes, they are faster, easier to create and easier to undo.*
- 最后,如果多个线程都是CPU密集型的(需要持续计算),那么不能获得性能上的增强,如果存在这大量的计算和 I/O处理,拥有多线程会加快程序执行的速度。