【基础】进程和线程的区别(超易懂的打比方)

有目标就不怕路远。年轻人.无论你现在身在何方.重要的是你将要向何处去。只有明确的目标才能助你成功。没有目标的航船.任何方向的风对他来说都是逆风。因此,再遥远的旅程,只要有目标.就不怕路远。没有目标,哪来的劲头?一车尔尼雷夫斯基

导读:本篇文章讲解 【基础】进程和线程的区别(超易懂的打比方),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

先来进入我们的大工厂~~~

进程就像是工厂里的一个个车间,而线程就是车间里的一条条流水线

而我们的工人张三就是处理任务的CPU

在很早很早以前,我们的工厂有车间A和车间B,工厂每次采集回来原材料,就会按照不同的车间进行分配

——进程是操作系统资源分配的基本单位

车间A有一条有流水线;车间B有两条流水线(流水线1和流水线2)

——每个进程可以有一个及以上的线程(至少有一个,建了一个车间总是要干点儿什么吧)

工厂规定,不同车间里存放的材料只能提供给本车间的流水线使用,也就是说张三不能把车间A里堆放的材料拿到车间B去使用,而且张三发现虽然都是在车间B里,但是流水线1和流水线2都有他们各自的原材料入口,作业区域,成品存放处等等

——同一个进程中的各个线程可以共享本进程的地址空间和资源,但是每个线程有自己独有的资源

但是我们只有张三一个工人,为了保障这2个车间的3条流水线都能正常运行,我们的张三需要以极快的速度频繁的在不同的车间以及流水线之间切换

——线程是CPU调度的最小单位(最小的执行单元)

张三同志表示在车间B的流水线1和流水线2之间切换,比从车间B跑到到车间A方便

——进程之间切换开销较大,线程之间切换开销较小

而且张三发现,在同样的时间内,虽然流水线的执行速度是一样的,但是有两条流水线的车间B总能比只有一条流水线的车间A生产更多的成品

——多线程可以提高运行效率(并非运行速度)

额。。差不多了,欢迎补充~~

最后来点正儿八经的~

对于操作系统来讲,一个任务就是一个进程(Process)

比如打开一个谷歌浏览器就是启动了一个浏览器进程,打开网易云就是启动了一个音乐播放器进程。

一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间,一个进程可以有多个线程,比如在Windows系统中,一个运行的xx.exe就是一个进程。

【基础】进程和线程的区别(超易懂的打比方)

有些进程还可以同时做多件事情,比如你打开网易云音乐,你可以在听歌的同时下载歌曲,还可以写评论,这些其实就是网易云这个“大任务”下面的“子任务”,也就是我们常说的线程(Thread),也称轻量级进程/进程元这些子任务可以单独进行,也可以同时执行。

当只有一个单核CPU,但是有多个进程时,由于CPU执行代码说是顺序执行的,所以操作系统会轮流让各个进程交替执行,任务A执行一会儿,切换到任务B,在切换到任务C……

打个比方就是工厂有三条流水线ABC,但是只有一个工人张三(好惨==),张三在流水线A干会儿,然后在流水线B干会儿,再到流水线C……

工人张三就像是那个单核CPU里的一个核,流水线ABC就是不同的进程

由于CPU的执行速度与切换速度极快,所以我们会有多个任务是在同时执行的错觉,只有多核CPU才能实现真正的并行(同时执行多个任务),就像是多个张三对多条流水线,那是真的在同时执行啦~但是当任务多于核数时,还是要轮流交替执行的。

总结下:

  • 进程是操作系统资源分配的基本单位
  • 线程是CPU调度的最小单位(最小的执行单元)
  • 每个进程可以有一个及以上的线程(至少有一个,打开个应用总是要干点儿什么吧)
  • 同一个进程中的各个线程可以共享本进程的地址空间和资源(但是每个线程有自己独有的资源)
  • 多线程可以提高运行效率(并非运行速度)
  • CPU在线程间的切换是随机的(可以理解为各个线程抢夺CUP这个资源)
  • 多线程没有多进程健壮
    • 一个线程的崩溃会导致该线程所在的整个进程崩溃
    • 而在保护模式下,一个进程的崩溃不会影响其他进程

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/135463.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!