Python探路-同步、异步、阻塞、非阻塞、并发、并行

为了在下一集更好的介绍nginx,这边先要梳理下一些比较重要,但又容易比较混淆的概念:

https://www.zhihu.com/question/19732473

1、同步和异步:

同步:同步就是发起一个请求,直到请求返回结果之后,才进行下一步操作。

异步:当一个异步操作发出后,调用者在没有得到结果之前,可以继续执行后续操作。这就是异步

二者的区别还是很明显的:请求发出后,是否需要等待请求结果,才能继续执行其他操作

这里要说明下:我们调用一个接口,然后去查进度,等待进度100%,再进行其他操作的方式是同步的

2、阻塞和非阻塞

阻塞:阻塞的概念往往伴随着线程。阻塞一般是指:在调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会被唤醒执行后续的操作。

非阻塞:在结果没有返回之前,该调用不会阻塞住当前线程。

有时我们会经常认为这几个概念很像,其实,这两者存在本质的区别,面向的对象是不同的。

阻塞/非阻塞:进程/线程需要操作的数据如果尚未就绪,是否妨碍了当前进程/线程的后续操作。

同步/异步:数据如果尚未就绪,是否需要等待数据结果。

同步和异步关注的是消息通信机制

阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态.

3、并发和并行

二者的区分度非常的高,就在于四个字:是否同时

并发:当有多个线程在操作时,如果系统只有一个CPU,操作系统只能把CPU运行时间划分成若干个时间段,再将时间段分配给各个线程执行,在一个时间段的快速的切换不同的线程代码运行。

并行:当系统有多个CPU时,可以存在当一个CPU执行一个线程时,另一个CPU可以执行另一个线程,两个线程互不抢占CPU资源,可以同时进行。

在这里很多人依旧没有很好的理解同步、异步、阻塞、非阻塞的区别,下面以一个例子说明:

故事:小A烧开水。

出场人物:小A出场道具:普通水壶(放在煤气灶上的那种,为了方便简称:水壶);会响的水壶(水烧开了会响的那种,简称:响壶)。故事目的:小A要拿开水泡咖啡

小A为了实现目的,指定了4个计划:

1、用水壶烧水,并且站在煤气灶旁边,啥事不干,两眼直勾勾的盯着水壶,等水烧开。烧开后就去泡咖啡。同步阻塞

假设烧水和泡咖啡是在同一个线程中执行。

2、仍然用水壶煮水,不过此时不再傻傻得站在那里看水开没开,而是去玩局LOL,每当自己死了,就过来看看水开了没有。如果水开了就去泡咖啡。同步非阻塞

假设这里玩LOL,是另一个线程运行的。

3、动用响壶烧水,仍然站在煤气灶旁边,不过此时不两眼直勾勾的盯着壶了,而是听响,因为响壶水开时会用响声通知小A。异步阻塞

4、在计划3的基础上,小A不站在煤气灶旁边了,而是去玩局LOL,等听到响壶的声音提醒后,再去跑咖啡。异步非阻塞

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值