线程与进程
-
两者都是操作系统的基本概念
-
操作系统 (Operating System,简称OS)
-
定义
-
管理计算机硬件与软件资源的计算机程序
-
CPU
-
定义
-
是计算机的核心,承担了所有的计算任务
-
就像是一座工厂,时刻在运行
-
单个CPU一次只能运行一个任务
-
假定工厂的电力有限,一次只能供给一个车间使用。也就是说,一个车间开工的时候,其他车间都必须停工。
-
进程 (process)
-
定义
-
代表CPU所能处理的单个任务
-
就好比工厂的车间
-
任意时刻,CPU总是运行一个进程,其余进程处于非运行状态
-
一个车间工作,其余车间必须停工
-
线程 (thread)
-
定义
-
一个进程包括多个线程
-
就好比一个车间里的工人
-
一个进程的任务由多个线程合作完成
-
多个工人合作完成同个任务
-
一个进程的内存空间是共享的,每个线程都可以使用这些共享内存
-
车间空间是工人共享的,允许每个工人进出
-
一个线程使用某些共享内存时,其他线程必须等它结束,才能使用这一块内存
-
每个房间大小不同,有些房间最多只能容纳一人,比如厕所,有人时,其他人就得等
-
某些内存区域,只能供给固定数目的线程使用
-
有些房间只能同时容纳n个人,超过的只能在外等候
-
互斥锁 (Mutual exclusion,缩写 Mutex)
-
定义
-
给内存上锁,防止多个线程同时读写某体块内存区域
-
宣誓房间暂时使用权,那就门口加把锁,其余人只能排队等锁打开再进入
-
信号量 (Semaphore)
-
定义
-
用来保证多个线程不会互相冲突
-
门口挂n把钥匙,进入去一把钥匙,出来再挂回原处
-
钥匙空了,那就只能排队等候
-
mutex是semaphore的一种特殊情况(n=1时)。也就是说,完全可以用后者替代前者。但是,因为mutex较为简单,且效率高,所以在必须保证资源独占的情况下,还是采用这种设计
-
操作系统的设计
-
以多进程的形式,允许多个任务同时运行
-
以多线程形式,允许单个任务分成不同的部分运行
-
提供协调机制,一方面防止进程之间和线程之间产生冲突
-
一方面允许进程之间和线程之间共享资源
参考阮一峰老师的文章[进程与线程的一个简单解释](https://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html)