美文网首页
同步异步,阻塞非阻塞,并行并发

同步异步,阻塞非阻塞,并行并发

作者: 洛克黄瓜 | 来源:发表于2018-03-28 14:47 被阅读0次

    1.同步与异步

    同步和异步关注点在于消息通信机制(synchronous/asynchronous communication)。

    A调用B,B通过A的信息去执行任务然后将结果返回给A。(A为调用方,B为被调用方)

    同步:B返回时即带了结果给A。

    异步:B立即返回,但是没有结果给A,而是等B执行结果出来后主动通知A。

    同步意味着严格的有序,异步意味着无序。

    2.阻塞与非阻塞

    阻塞与非阻塞关注点在于程序等待调用结果的状态  (侧重于调用方的行为)。

    阻塞:程序被挂起的状态,它再等待某个操作完成期间,自身无法继续处理其他事务,则该程序在该操作上是阻塞的。(平时见得最多的就是网络IO阻塞及硬盘读取IO阻塞)

    非阻塞:程序在等待某个操作完成期间,可以继续处理其他事务,则该程序在该操作上是非阻塞的。

    仍然是用A调用B为例:

    阻塞意味着A要等待B返回结果给它才能干活,B没返回结果之前,A不能处理其他事务。

    非阻塞意味着B的结果还没出来时,A可以处理其他事务。


    同步异步与阻塞非阻塞结合的例子(场景:小黄在等女友化完妆出门逛街)

    同步阻塞:小黄站门口干等,看到女友化完妆后,就出发。

    同步非阻塞:小黄站门口刷微博,时不时抬头看下女友是否化完妆,如果化完妆就出发。

    异步阻塞:小黄站门口干等,女友化完妆会通知他,然后出发。

    异步非阻塞:小黄站门口低头刷微博,女友化完妆通知他,然后出发。


    3.并行与并发(concurrency/parallelism)

    并行是逻辑上的同时进行,并发是物理上的同时进行(实时的)。

    并发:

            CPU执行是按照时间被切片的,每个片段处理的可以是不同的任务,而CPU不断切换任务导致宏观上任务是“同时”在执行。

            并发强调程序的组织结构。指程序要被设计成多个可独立执行的子任务。

            并发是为了让每个字任务都有机会被尽快执行,不一定提高整体进度。

    并行:

            多核CPU的情况下,每个CPU执行各自独立的子任务。是真正的同时执行。

            并行描述的是程序的执行状态。指多个任务同时被执行。

            并行是为了利用多核加速多任务完成的进度


    python由于GIL的存在,一个进程中真正在运行的只能是一个线程。

    所以python的多线程实际上利用的是并发,通过线程的切换实现IO操作的非阻塞。

    一个进程内的多个线程只能使用一个CPU。

    参考链接:https://www.jianshu.com/p/5c80a19d0cc6

    相关文章

      网友评论

          本文标题:同步异步,阻塞非阻塞,并行并发

          本文链接:https://www.haomeiwen.com/subject/gmvycftx.html