进程(process)和线程(thread)不仅是操作系统中的两个基本概念|mutex和线程的区别

进程(process)和线程(thread)不仅是操作系统中的两个基本概念 , 也是面试官最喜欢考察的问题之一 , 很有必要来搞清楚 。
开门见山地说吧 。
进程就是应用程序在内存中分配的空间 , 也就是正在运行的程序 , 各个进程之间互不干扰 。 同时进程保存着程序每一个时刻运行的状态 。
此时 , CPU采用时间片轮转的方式运行进程:CPU为每个进程分配一个时间段 , 称作它的时间片 。 如果在时间片结束时进程还在运行 , 则暂停这个进程的运行 , 并且CPU分配给另一个进程(这个过程叫做上下文切换) 。 如果进程在时间片结束前阻塞或结束 , 则CPU立即进行切换 , 不用等待时间片用完 。
使用进程+CPU时间片轮转方式的操作系统 , 在宏观上看起来同一时间段执行多个任务 , 换句话说 , 进程让操作系统的并发成为了可能 。 虽然并发从宏观上看有多个任务在执行 , 但在事实上 , 对于单核CPU来说 , 任意具体时刻都只有一个任务在占用CPU资源 。
进程(process)和线程(thread)不仅是操作系统中的两个基本概念|mutex和线程的区别】虽然进程的出现 , 使得操作系统的性能大大提升 , 但是随着时间的推移 , 人们并不满足一个进程在一段时间只能做一件事情 , 如果一个进程有多个子任务时 , 只能逐个地执行这些子任务 , 很影响效率 。
那么能不能让这些子任务同时执行呢?于是人们又提出了线程的概念 , 让一个线程执行一个子任务 , 这样一个进程就包含了多个线程 , 每个线程负责一个单独的子任务 。
总之 , 进程和线程的提出极大地提高了操作系统的性能 。 进程让操作系统的并发性成为了可能 , 而线程让进程的内部并发成为了可能 。
这下能理解了吧?
如果还不理解的话 , 可以看一下阮一峰老师的解释 。
进程(process)和线程(thread)不仅是操作系统中的两个基本概念|mutex和线程的区别
文章图片
计算机的核心是CPU , 它承担了所有的计算任务 。 它就像一座工厂 , 时刻在运行 。
假定工厂的电力有限 , 一次只能供给一个车间使用 。 也就是说 , 一个车间开工的时候 , 其他车间都必须停工 。 背后的含义就是 , 单个CPU一次只能运行一个任务 。
进程(process)和线程(thread)不仅是操作系统中的两个基本概念|mutex和线程的区别
文章图片
进程就好比工厂的车间 , 它代表CPU所能处理的单个任务 。 任一时刻 , CPU总是运行一个进程 , 其他进程处于非运行状态 。
进程(process)和线程(thread)不仅是操作系统中的两个基本概念|mutex和线程的区别
文章图片
一个车间里 , 可以有很多工人 。 他们协同完成一个任务 。
进程(process)和线程(thread)不仅是操作系统中的两个基本概念|mutex和线程的区别
文章图片
线程就好比车间里的工人 。 一个进程可以包括多个线程 。
进程(process)和线程(thread)不仅是操作系统中的两个基本概念|mutex和线程的区别
文章图片
车间的空间是工人们共享的 , 比如许多房间是每个工人都可以进出的 。 这象征一个进程的内存空间是共享的 , 每个线程都可以使用这些共享内存 。
进程(process)和线程(thread)不仅是操作系统中的两个基本概念|mutex和线程的区别
文章图片
可是 , 每间房间的大小不同 , 有些房间最多只能容纳一个人 , 比如厕所 。 里面有人的时候 , 其他人就不能进去了 。 这代表一个线程使用某些共享内存时 , 其他线程必须等它结束 , 才能使用这一块内存 。
进程(process)和线程(thread)不仅是操作系统中的两个基本概念|mutex和线程的区别
文章图片
一个防止他人进入的简单方法 , 就是门口加一把锁 。 先到的人锁上门 , 后到的人看到上锁 , 就在门口排队 , 等锁打开再进去 。 这就叫"互斥锁"(Mutualexclusion , 缩写Mutex) , 防止多个线程同时读写某一块内存区域 。