进程和线程

进程和线程

徐静

什么叫多任务?

简单的说就是操作系统可以同时运行多个任务。打个比方,你一边浏览网页,一边听MP3,一边用word赶作业,这就是多任务,至少同时运行了3个任务进行运行。还有很多任务悄悄的在后台运行着,只是桌面没有显示而已。

现在,多核的CPU非常普及了,即使单核的CPU,也可以执行多任务,由于CPU执行代码是按书序执行的,那么单核的CPU是怎么执行多任务的呢?

答案就是操作系统轮流让各个任务交替执行,第一个任务执行0.01秒,切换到任务2,任务2执行0.01秒……这样反复执行下去。每个任务都是交替执行的,由于CPU的执行速度太快了,我们感觉所有任务都在同时执行一样。 而真正的并行执行多任务只能在多核CPU上实现,但是由于任务数量远远多于CPU的核心数量,所以操作系统自动把多任务轮流调度到每个核心上执行。

对于操作系统来说,一个任务就是一个进程(process),比如打开一个浏览器,就启动了浏览器的进程,打开一个记事本就启动了一个记事本的进程,打开一个word就启动了一个Word进程。

有些进程还不止干一件事,比如word,他可以同时进行打字,拼写检查,打印等事情。在一个进程内部同事干多见识,就需要同时运行多个‘子任务’。我们把进程内的这些‘子任务’称为线程(Thread)

每一个进程至少干一件事,一个进程至少有一个线程,多线程的执行方式和多进程是一样的。

我们编写的所有R及Python程序,都是执行单人舞的进程,也就是只有一个线程,如果我们要同时执行多个任务怎么办?

解决方案

一种是启动多进程,每个进程虽然只有一个线程,但是多个进程可以一块执行多个任务。

还有一种是地洞一个进程,在一个进程中启动多个线程,这样多线程也可以一块执行多个任务(听说在Windows谈线程纯粹扯谈)

当然还有第三种办法,就是启动多个进程,每个进再启动多个线程,这种情况比较复杂,实际很少采用。

总结一下三种方式

  • 多进程模式

  • 多线程模式

  • 多进程+多线程模式

线程是最小的执行单元,而进程至少由一个线程的组成,如何调度进程和线程完全由操作系统决定。程序不能决定什么时候执行,执行多长时间。多线程和多继承设计到同步,数据共享的问题,编写起来更复杂。

Author face

徐静

数据科学从业者,算法工程师. 善于用数据科学的工具透析业务,模型的线上化部署,网络爬虫及前端可视化. 喜欢研究机器学习,深度学习及相关软件实现.目前自己还是小白一个,希望多多学习.

最近发表的文章