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

    什么是异步和同步

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

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

    阻塞与非阻塞

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

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

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

    协程

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

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

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

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

  • 相关阅读:
    ES6常用语法
    @Autowired和@Resource的区别
    spring boot 引导
    Springboot 日志管理配置logback-spring.xml
    Java异常之checked与unchecked
    @Transactional(rollbackFor=Exception.class)的使用
    使用spring @Scheduled注解执行定时任务、
    Spring入门学习推荐
    Hadoop调优
    关于Flink--ProcessFunction的使用
  • 原文地址:https://www.cnblogs.com/lanchang/p/7365116.html
Copyright © 2011-2022 走看看