zoukankan      html  css  js  c++  java
  • 同步异步、阻塞非阻塞 总结

    同步/异步(描述网络通信模式,适用于请求-响应模型)

    • 同步:发送方发送请求后,需要等待接收响应,否则将一直等待
    • 异步:发送方发送请求后,不需要等待响应,可以继续发送下一个请求,或者主动挂起线程并释放CPU

    阻塞/非阻塞(描述进程的函数调用方式)

    • 阻塞:IO 调用会一直阻塞,直至结果返回才能继续执行
    • 非阻塞:IO 调用会立即返回,不需要等待结果,并可以执行下一个 IO 调用

    总结,同步异步和阻塞非阻塞是两个不同的概念,用简单的数据库查询来举一个例子:

    1. 如果发送一个请求,需要等待数据库响应,否则将一直等待,这就是同步
    2. 如果发送一个请求,不需要数据库响应,就可以继续发送下一个请求(NIO模式、回调通知模式),或者主动将任务插入队列中,主动挂起线程并释放CPU(异步队列模式),这就是异步
    3. 在第2点中,如果采用异步队列模式,会造成线程阻塞或超时等待,直至结果返回后才能继续执行,这就是异步阻塞
    4. 在第2点中,如果采用NIO模式、回调通知模式,则数据库IO调用可以立即返回,这就是异步非阻塞

    一般来说,同步是最简单的编程方式,而异步编程虽然需要一定技术,但是却能提升系统性能。对于阻塞与非阻塞,阻塞的实时响应性更好,但在高并发情况下阻塞线程数会急剧增加,导致大量的上下文切换会引起挂起/唤醒线程的性能损耗,而非阻塞的性能吞吐量更高,但由于其是顺序执行每一个事件,一旦处理某一个事件过久,会影响后续事件的处理,因此实时响应性较差。

  • 相关阅读:
    PHP流程控制之do...while循环的区别
    php流程控制 之循环语句的使用
    PHP流程控制之分支结构switch语句的使用
    PHP流程控制之if语句多种嵌套
    PHP流程控制之嵌套if...else...elseif结构
    PHP基础语法之 三元运算符和其它运算符
    PHP基础语法之 位运算
    php常量和变量之变量引用
    php数据类型之自动转换和强制转换
    php数据类型之查看和判断数据类型
  • 原文地址:https://www.cnblogs.com/pomer-huang/p/sync-async.html
Copyright © 2011-2022 走看看