前言:要理解进程和线程,必须先搞清楚内存管理,建议先阅读本站文章《Linux内存管理笔记》
首先,我们要问,什么是进程?(这里我们讨论的概念都是基于面向线程设计的操作系统)
什么是进程
在说明这个问题之前,我们先想象一个场景:周末在家开着电脑(MacBook),用浏览器(Chrome)访问网易云音乐,选了一首歌播放着。我们把唱歌这个任务交给了浏览器,浏览器正在做着这个任务。
好了,什么是进程?上面这个任务就是一个浏览器进程。这个任务实际上是我们交给操作系统,操作系统分配给浏览器的,对操作系统来说,一个任务就是一个进程。进程(process)就是正在执行的程序。经常会听到身边的开发工程师说我的程序跑着呢,我们的程序需要跑好几个小时,这里跑着的程序就是进程。这里Chrome浏览器本身是Google工程师开发的程序。程序本身只是指令、数据及其组织形式的描述,进程才是程序真正运行的实例。
什么是线程
接下来,我们探讨什么是线程?
我们觉得有必要把进程和线程的概念整理到文档中,于是打开word程序,根据上面我们明白这里启动了一个word进程。开始打字,会发现,这个word进程一边接收我们输入的信息,一边检查拼写。其实,接收输入消息是一个子任务,检查拼写是另一个子任务。这种在进程中子任务就是线程(thread)。一条线程是进程中一个单一顺序的控制流。一个进程可以有多个线程,进程是线程的容器,每条线程并行执行不同的任务。
如果把CPU比作一个工厂,进程就像工厂的车间,线程就像车间的工人。一个工厂可以有多个车间,一个车间可以有多个工人。详细说明参考:《进程和线程的一个简单解释》
这里仅仅描述了进程和线程的概念,进程和线程的特点请参考接下来的文章。
(全文完)
参考:
https://zh.wikipedia.org/wiki/%E8%A1%8C%E7%A8%8B
https://zh.wikipedia.org/wiki/%E7%BA%BF%E7%A8%8B
https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014319272686365ec7ceaeca33428c914edf8f70cca383000