这是7年前的一篇老文章,但绝对值得一读。特别是对计算机不熟悉的新手,可以通过本文对过程和线程有一个相对直观的理解。
但是,科普文章的重点很容易理解,并且需要与相关材料进行进一步学习。对技术的理解不仅应基于直观印象。
进程和线程是操作系统的基本概念,但是它们相对抽象并且不容易掌握。最近,我阅读了一篇材料[1],发现有一个很好的类比可以清晰,轻松地解释它们。
1计算机的核心是CPU,它承担所有计算任务。它就像一个工厂,总是在运转。
2假设工厂的能力有限,并且一次只能由一个车间使用。换句话说,当一个工作坊开始时,所有其他的工作坊都必须停止。
其背后的含义是单个CPU一次只能运行一个任务。 3该过程就像工厂的车间一样,它代表CPU可以处理的单个任务。
在任何时候,CPU始终运行一个进程,而其他进程处于非运行状态。 4车间里可能有很多工人。
他们共同努力完成一项任务。 5线程就像车间的工人。
一个进程可以包含多个线程。 6车间中的空间由工人共享。
例如,许多房间可供每个工人使用。这象征着进程的内存空间是共享的,并且每个线程都可以使用这些共享的内存。
7但是,每个房间的大小都不同,有些房间最多只能容纳一个人,例如洗手间。当里面有人时,没有其他人可以进入。
这意味着当一个线程使用某些共享内存时,其他线程必须等待其结束才可以使用此内存。 8防止他人进入的一种简单方法是在门上放一把锁。
最早到达的人将门锁上,后来到达的人看到了锁,并排在门前,等待锁打开后才进入。这被称为“互斥”。
(互斥,缩写为Mutex),可防止多个线程同时读取和写入某个内存区域。 9有些房间可以同时容纳n个人,例如厨房。
换句话说,如果人数大于n,则多余的人只能在外面等。这就像某些内存区域,只能由固定数量的线程使用。
10此时的解决方案是将n个钥匙挂在门上。那些输入的人会拿出一把钥匙,然后在出来时把钥匙挂回去。
后来到达的那些人发现钥匙是空的,并且知道他们必须在门口排队等候。这种方法被称为“信号量”。
(信号量),用于确保多个线程不会相互冲突。不难看出互斥锁是信号量的一种特殊情况(当n = 1时)。
换句话说,可以使用后者代替前者。但是,由于互斥锁相对简单且有效,因此在必须确保资源垄断时仍会使用此设计。
11因此,操作系统的设计可以归纳为三点:•以多进程的形式,允许多个任务同时运行;以多线程的形式,单个任务被允许划分为不同的部分来运行;提供一种协调机制,一方面防止进程冲突,另一方面,线程之间的冲突允许资源在进程和线程之间共享。参考文献:[1] http://www.qnx.com/developers/docs/6.4.1/neutrino/getting_started/s1_procs.html作者:阮一峰来源:博客阮一峰免责声明:本文摘自: 21ic授权后发布,版权归原作者所有,该平台仅提供信息存储服务。
本文仅代表作者的个人观点,并不代表该平台的立场。如有任何疑问,请与我们联系,谢谢!。