说来惭愧,虽然算是计算机科班出身,但对于进程和线程的概念一直没有一个很好的理解。最近终于下定决心整理和总结了一下进程和线程的概念。
1.多任务操作系统
首先在说明进程和线程之前,我们必须先了解什么是多任务操作系统。我们所使用的主流操作系统(windows,MacOS, Ubuntu等)都是称为支持多任务的操作系统。所谓支持多任务,顾名思义是指操作系统可以同时运行多个任务。例如用户可以边在VSCode上写代码边在chrome游览器上搜索Debug方法。 这时,对于操作系统来说VSCode是一个任务,chrome也是一个任务。能像这样支持多个任务同时运行的操作系统就是多任务操作系统。
2.进程(Process)
那多任务操作系统和进程和线程又有什么关系呢。其实对于操作系统来说任何一个任务就是一个进程。上面的例子中,操作系统同时运行着VSCode和Chrome两个进程。 当然,虽说操作系统是同时运行着多个进程,但这个“同时”其实并不是真的同时。对于单核CPU的操作系统来说,同一时刻操作系统只能做一件事。所以操作系统其实是交替执行多个任务,使其看起来好像是同时运行着多个任务一样。对于多核操作系统来说,少于CPU核数的任务确实是可以实现并行的。但相比于一般我们使用计算机时所产生的任务相比,CPU核数实在是太少了。所以即使是基于多核cpu的操作系统基本也是交替执行任务从而实现同时处理多个任务。
3.线程(Thread)
现在说回进程和线程。既然一个任务就是一个进程,那线程又是什么呢?其实线程对于进程就如同进程对于操作系统一样。一个进程代表一个任务,但大多数情况下计算机的一个任务很少只需要做一件事。比如当我们使用VSCode的时候我们一边敲代码一边可能有插件帮我们做文法检查。这时对于VSCode这个进程来说就包含了运行”敲代码”和检查文法的两个线程。所以一个进程至少有一个线程。多线程可以由多核cpu同时运行也可以是有单核或者多核cpu交替运行。