zoukankan      html  css  js  c++  java
  • 单线程 多线程 同步 异步 阻塞 非阻塞 理解与总结 Better

    单线程与多线程

    当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源。而一个进程又是由一个或多个线程所组成的。

    线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等)。线程可以理解为进程中的执行的一段程序片段。

    例如——某音频播放程序可以实现一边在显示歌词、一边在显示音频柱、一边在放歌。这就是一个程序下面有多个线程。
    在单个程序中同时运行多个线程完成不同的工作,称为多线程,反之为单线程。
    生活中的比喻:

    单线程:一个人。扫地->做饭->洗衣服

    多线程:三个人。A(扫地),B(做饭),C(洗衣服)

    同步与异步(被调用者而言)、阻塞与非阻塞(调用者而言)

    1、同步(sync):

    发出一个功能调用时,在没有得到结果之前,该调用就不返回。

    2、异步(async):

    与同步相对,调用在发出之后,这个调用就直接返回了,所以没有返回结果。当这个调用完成后,一般通过状态、通知和回调来通知调用者。对于异步调用,调用的返回并不受调用者控制。

    对于通知调用者的三种方式,具体如下:

    状态:即监听被调用者的状态(轮询),调用者需要每隔一定时间检查一次,效率会很低。

    通知:当被调用者执行完成后,发出通知告知调用者,无需消耗太多性能。

    回调:与通知类似,当被调用者执行完成后,会调用调用者提供的回调函数。

    3、阻塞(block):

    阻塞调用是指调用结果返回(或者收到通知)之前,当前线程会被挂起,即不继续执行后续操作。

    简单来说,等前一件做完了才能做下一件事。

    4、非阻塞(non-block):

    非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。

    总结:所以所谓同步异步,是对于被调用者而言的;而阻塞非阻塞,则是对调用者而言的。

    和刚才一样,打个比喻加深理解:

    1、同步阻塞:你打电话给114查路线,在不挂断的情况下,客服帮你查了十分钟之后告诉你,期间你一直在接听电话。

    2、同步非阻塞:你打电话给114查路线,在不挂断的情况下,客服帮你查了十分钟之后告诉你,你期间吃了个(打电话没有影响你做其他事,显示运用中也很难遇到)。

    3、异步非阻塞:你打电话给114查路线,客服说查好之后打给你,这期间你可以做任何事。

    4、异步阻塞:你打电话给114查路线,客服说查好之后打给你,但这期间你什么都没做,等到回复电话之后,再继续下一步动作。(是不是很傻)现实运用中,异步阻塞是没有意义的!

    链接:https://www.jianshu.com/p/19b3e729c8a8
    链接:https://blog.csdn.net/wopelo/article/details/70141623
  • 相关阅读:
    [AngularJS] Html ngSanitize, $sce
    [AngularJS] ngModelController render function
    [MODX] 3. Placeholder +
    [MODX] 2. Chunks $
    HTTP-Runoob:HTPP Content-Type
    HTTP-Runoob:HTTP状态码
    HTTP-Runoob:HTTP请求头信息
    HTTP-Runoob:HTTP请求方法
    HTTP-Runoob:HTPP消息结构
    HTTP-Runoob:HTTP简介
  • 原文地址:https://www.cnblogs.com/huangtq/p/14503792.html
Copyright © 2011-2022 走看看