关于面试:进程和线程的区别是什么

33次阅读

共计 1255 个字符,预计需要花费 4 分钟才能阅读完成。

本文参考码农翻身公众号文章,并做了适当的调整和总结。

依照历史的脉络,执行程序的形式顺次经验了批处理,过程和线程三个阶段,本文依照这个程序,并以故事的模式来解释过程与线程的区别。

批处理

很久很久以前,有两个程序,暂且称他们为旺财和小强。

旺财和小强这两个程序都很长,每个都有十几万行。他们两个的人生价值就是到 CPU 下来运行,把运行后果通知人类。

CPU 是稀缺资源,只有一个,他们俩必须排着队,轮流应用。

旺财从头到尾执行完了,让出 CPU,让小强从头儿去执行。

人类把这种解决形式叫做 批处理

过程

长久以来,两人相安无事。起初 CPU 的速度越来越快,远远超过了内存,硬盘的读写速度。

人类想到,这批处理零碎的效率有点低啊,你看当小强须要从硬盘上读取数据的时候,CPU 也始终在期待,这是多大的节约啊!这时候齐全能够让旺财来运行一下嘛!

当然,得保留好小强的 执行现场:具体执行到那一行程序指令了,函数调用到什么档次了,每个函数调用都有什么样的参数,CPU 寄存器中的值 ….. 等等这一系列货色。

如果不把小强的执行现场给保留下来,等到小强的数据从硬盘读完了,就没法回到中断处来继续执行了。

这个执行现场,再加上小强的代码,就是一个执行中的程序,被称为“过程”。

旺财和小强在运行的时候,也被革新成了过程。

人类还规定:过程不能长时间占据 CPU,只能在 CPU 上执行一小会儿,而后马上切换到别的过程去执行。

这样,通过引入过程和规定每个过程在 CPU 上的最长执行工夫,极大的缓解了 CPU 节约的问题,同时过程也自然而然的成为了资源分配的根本单元。

线程

起初的起初,旺财有了界面,还能拜访网络,每当它联网的时候(这也是个十分十分耗时的操作),就得把 CPU 让给小强。

即便旺财再次被调度执行,因为网络数据还没有返回,他必须期待,什么事件都做不了,在人类看来,界面根本无法操作,旺财不响应了!气得人类常常把旺财 kill 掉。

旺财心里苦,他很纳闷小强怎么就没有问题,小强不是要读写硬盘吗?那也是很慢的操作啊。

小强说:“你傻啊,外部只有一个执行的流程,一遇到耗时的操作就得期待,你看看我,外部搞了两个执行流程(线程),一个用来读写硬盘(T1),另外一个解决界面(T2)。我和操作系统磋商好了,如果 T1 在读写硬盘,就能够调度我的 T2 来执行,这样界面至多还能够操作。”

旺财觉得很有意思,也采纳了相似方法。

于是,一个过程中至多有一个执行的流程(主线程),也能够开启新的执行流程(线程)。

这样,通过在过程中引入线程并和操作系统磋商以线程为根本的调度单位,就解决了领有界面的过程在进行耗时操作时,无奈响应的问题。

总结

  1. 批处理就是程序一个一个排着队执行。
  2. 通过引入过程和规定每个过程在 CPU 上的最长执行工夫,极大的缓解了 CPU 节约的问题,同时过程也自然而然的成为了资源分配的根本单元。
  3. 通过在过程中引入线程并和操作系统磋商以线程为根本的调度单位,就解决了领有界面的过程在进行耗时操作时,无奈响应的问题。
  4. 过程切换波及到资源的重新分配,所以其工夫损耗远远大于线程切换(多个线程共享过程的资源)
正文完
 0