进程/线程/并发/并行/同步/异步/阻塞/非阻塞/...

下面是我在学习过程中 自己的一点理解 如果有误 感谢指正!

  • 进程
    官方解释 " 进程是资源分配的最小单位,线程是CPU调度的最小单位 "
    说实话,对于不了解进程线程的人来说,根本看不懂,我也是~

    一个程序为一个进程, 在windows下有些软件运行起来是多进程的.
    我开了很多chrome窗口, 有这么多进程, 一个窗口一个进程.
    在这里插入图片描述在这里插入图片描述

  • 线程
    线程 是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位. 线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。

做个简单的比喻:
进程=火车,线程=车厢
线程在进程下行进(单纯的车厢无法运行)
一个进程可以包含多个线程(一辆火车可以有多个车厢)
不同进程间数据很难共享(一辆火车上的乘客很难换到另外一辆火车,比如站点换乘)
同一进程下不同线程间数据很易共享(A车厢换到B车厢很容易)
进程要比线程消耗更多的计算机资源(采用多列火车相比多个车厢更耗资源)
进程间不会相互影响,一个线程挂掉将导致整个进程挂掉(一列火车不会影响到另外一列火车,但是如果一列火车上中间的一节车厢着火了,将影响到所有车厢)
进程可以拓展到多机,进程最多适合多核(不同火车可以开在多个轨道上,同一火车的车厢不能在行进的不同的轨道上)
进程使用的内存地址可以上锁,即一个线程使用某些共享内存时,其他线程必须等它结束,才能使用这一块内存。(比如火车上的洗手间)-“互斥锁”
进程使用的内存地址可以限定使用量(比如火车上的餐厅,最多只允许多少人进入,如果满了需要在门口等,等有人出来了才能进去)-“信号量”

开个QQ,开了一个进程;开了迅雷,开了一个进程。
在QQ的这个进程里,传输文字开一个线程、传输语音开了一个线程、弹出对话框又开了一个线程。所以运行某个软件,相当于开了一个进程。
在这个软件运行的过程里(在这个进程里),多个工作支撑的完成QQ的运行,那么这“多个工作”分别有一个线程。所以一个进程管着多个线程。
通俗的讲:“进程是爹妈,管着众多的线程儿子”…

  • 并发
    能够进行多个任务,来回交替执行,可以不同时,但是要可以 进行多个任务的处理
    单核CPU 处理 多个程序
	程序1 -> CPU1
	程序2 -> CPU1
	操作系统CPU轮询调度,实现并发.
  • 并行
    同并发基本一样, 最大的区别 是 “同时” 并行必须要可以 同时 处理 多个任务
    多核CPU 同时处理 多个程序
	程序1 -> CPU1
	程序2 -> CPU2 
	这是并行 . 

到这里还不能理解并发/并行的话,举个例子:

我收到了小厂的offer
今天来入职, hr 小姐姐都请假了, 就剩一个人事总监在上班. 是一个油光满面的老男人.
今天和我一起入职的有3个人, 分别是产品经理,测试,前端. 只有我一个后端.
入职流程很繁琐,老男人忙的要死,一会儿给我一个文件,趁我填表的功夫,还要去给他们三个人办入职,来回折腾了半天,到中午吃饭才搞完!
这就是并发.

我收到了大厂的offer !!
今天来入职, hr 小姐姐来门口接我了~ 把我领到会议室,我发现还有3个hr小姐姐在帮别人办理入职, 大厂真好!! 一对一办理入职!
入职流程很繁琐,但是我们一对一对接的很顺利,半小时就搞定了
这就是并行.

在这里插入图片描述
在这里插入图片描述

并发和并行的区别就很明显了。它们虽然都说是"多个进程同时运行",但是它们的"同时"不是一个概念。并行的"同时"是同一时刻可以多个进程在运行(处于running),并发的"同时"是经过上下文快速切换,使得看上去多个进程同时都在运行的现象,是一种OS欺骗用户的现象。**

实际上,当程序中写下多进程或多线程代码时,这意味着的是并发而不是并行 并发是因为多进程/多线程都是需要去完成的任务,不并行是因为并行与否由操作系统的调度器决定,可能会让多个进程/线程被调度到同一个CPU核心上。只不过调度算法会尽量让不同进程/线程使用不同的CPU核心,所以在实际使用中几乎总是会并行,但却不能以100%的角度去保证会并行。也就是说,并行与否程序员无法控制,只能让操作系统决定

再次注明,并发是一种现象,之所以能有这种现象的存在,和CPU的多少无关,而是和进程调度以及上下文切换有关的。
https://www.cnblogs.com/f-ck-need-u/p/11161481.html

  • 同步
    同步是指线程在访问某一资源时,获得了资源的返回结果之后才会执行其他操作,否则主动继续获取这一资源

  • 异步
    异步与同步相对,是指线程在访问某一资源时,无论是否取得返回结果,都进行下一步操作;当有了资源返回结果时,系统自会通知线程。

用一个比喻来说明:10多前的银行是没有业务取号的,我们去办理业务时,如果有很多人,那就先排队,然后关注着什么时候轮到自己,这就是同步;
现在去银行,得先取一张小纸条,上面写着你的业务号,轮到你的时候,银行会喊你,这就是异步。

异步机制往往注册一个回调机制,在所等待的事件被触发时由触发机制(银行柜台业务员)通过某种机制(业务办理号码)找到等待该事件的人。

  • 阻塞
    线程在等待某个操作完成期间,自身无法继续执行别的操作,则称该线程在该操作上是阻塞的。
  • 非阻塞
    线程在等待某个操作完成期间,自身可执行别的操作,则称该线程在该操作上是非阻塞的。

继续上面银行办理业务的例子,无论是10多年前的排队办理业务,还是现在的业务号办理业务,如果在我们在等待过程中,什么也不能做,那就是阻塞的;
如果在等待过程中,可以做其他事情(看书、玩手游),那就是非阻塞的。

同步和异步是个线程处理方式或手段,阻塞和非阻塞是线程的一种状态,两者并不相同也并不冲突。

同步、异步与阻塞非阻塞可以产生不同的组合:同步阻塞、同步非阻塞、异步阻塞、异步非阻塞。

还是银行办理业务的例子:
如果排着队,且只能傻傻的排着队,看着什么时候到自己,那就是同步阻塞;
如果排着队还能玩玩手机,偶尔抬头看看什么时候到自己,那就是同步非阻塞。
如果是现在的取票按业务号办理业务,拿到号码后就陷入懵逼状态,啥也不能做,直到银行根据业务号通知自己,那就是异步阻塞;
如果拿到业务号之后,自己爱干嘛干嘛,那就是异步非阻塞。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值