zoukankan      html  css  js  c++  java
  • 同步、异步与阻塞、非阻塞、协程

    什么是异步和同步

    异步编程对 JavaScript 语言太重要。JavaScript 只有一根线程,如果没有异步编程,根本没法用,非卡死不可。

    所谓"异步",简单的说一个任务分成两段,先执行第一段,然后转而执行其他任务,等做好了准备,再回过头执行第二段。这种不连续的执行,就叫做异步。相应地,连续的执行,就叫做同步。

    阻塞与非阻塞

    阻塞/非阻塞, 它们是程序在等待消息(无所谓同步或者异步)时的状态.

    阻塞
    阻塞调用是指调用结果返回之前,当前线程会被挂起。函数只有在得到结果之后才会返回。
    socket接收数据函数recv是一个阻塞调用的例子。
    当socket工作在阻塞模式的时候, 如果没有数据的情况下调用该函数,则当前线程就会被挂起,直到有数据为止。

    非阻塞
    非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。

    协程

    传统的编程语言,早有异步编程的解决方案。其中有一种叫做"协程"(coroutine),意思是多个线程互相协作,完成一个任务。

    举例来说,读取文件的协程写法如下。

    
    function asnycJob() {
      // ...其他代码
      var f = yield readFile(fileA);
      // ...其他代码
    }
    

    上面代码的函数 asyncJob 是一个协程,它的奥妙就在其中的 yield 命令。它表示执行到此处,执行权将交给其他协程。协程遇到 yield 命令就暂停,等到执行权返回,再从暂停的地方继续往后执行。

  • 相关阅读:
    【强烈推荐】 超漂亮的仿腾讯弹出层效果(兼容主流浏览器<转>;
    必须掌握的八个【cmd 命令行】
    grep命令的用法
    sed 命令的用法1
    Paste命令的用法
    uniq命令的用法
    join命令的用法
    Sort命令的用法
    cut命令的用法
    tr命令学习
  • 原文地址:https://www.cnblogs.com/lanchang/p/7365116.html
Copyright © 2011-2022 走看看