曾经有一段时间,在我的理解中,同步就是阻塞,异步就是非阻塞。可不就是这样吗?从代码执行的角度来看,确实如此。但随着了解的深入,概念和场景的拓展,有了不一样的理解。试分析之,难免疏漏,欢迎指正。

——题记

一、同步和异步、阻塞和非阻塞

这四个概念两两组合,会形成4个新的概念。如下所示:

1.同步阻塞

客户端发送请求给服务端,此时服务端处理任务时间很久,则客户端则被服务端阻塞了,所以客户端会一直等待服务端的响应,此时客户端不能做其他任何事,服务端也不会接收其他客户端的请求。这种通信机制比较简单粗暴,但是效率不高。

2.同步非阻塞

客户端发送请求给服务端,此时服务端处理任务时间很久,这个时候虽然客户端会一直等待响应,但是服务端可以处理其他的请求,过一会来处理原先的。这种方式很高效,一个服务端可以处理很多请求,不会再因为任务没有处理完而堵着,所以这是非阻塞的。

3.异步阻塞

客户端发送请求给服务端,此时服务端处理任务时间很久,但是客户端不会等待服务器响应,它可以做其他事,等服务器处理完毕后再把结果响应给客户端,客户端得到回调后再处理服务端的响应。这种方式可以避免客户端一直处于等待的状态,优化了用户体验,其实就是类似于网页里发起的ajax异步请求。

4.异步非阻塞

客户端发送请求给服务端,此时服务端处理任务时间很久,这个时候的任务虽然处理时间会很久,但是客户端可以做其他的任务,因为他是异步的,可以在回调函数里处理响应;同时服务端是非阻塞的,所以服务端可以去处理其他的任务,如此,这个模式就显得非常高效了。

二、一个例子

以排队吃饭为例:

  1. 同步就是你需要自己每隔一段时间,以轮询的方式去看看是否有空位;
  2. 异步就是有空位了会有人通知你去吃饭;
  3. 阻塞就是在等待的过程中,你不去做其他事情,干等着;
  4. 非阻塞就是你在等待过程中可以去做其他事情,比如玩手机、抽烟和烫头。

三、小结

异步的优显而易见,大大优化用户体验,非阻塞使得系统资源开销远远小于阻塞模式,因为系统不需要创建新的进程或线程,大大节约了系统的资源,如此多出来的资源可以给其他中间件去服务了。

Nginx Note03——异步非阻塞机制相关推荐

  1. Nginx的异步非阻塞

    转载地址:https://blog.csdn.net/dutsoft/article/details/55224755 同步与异步 同步与异步的理解 同步与异步的重点在消息通知的方式上,也就是调用结果 ...

  2. nginx异步非阻塞理解

    nginx异步非阻塞理解? 看了一下午如何理解异步非阻塞,不是用生活举例的就是只是说某一点的,其实真的还是很不明白,最后只能通过nginx的异步非阻塞模型来稍微理解理解了,我也不拿什么生活的举例了因为 ...

  3. nginx异步非阻塞 解析

    同步与异步的理解 同步与异步的重点在消息通知的方式上,也就是调用结果通知的方式. 同步:当一个同步调用发出去后,调用者要一直等待调用结果的通知后,才能进行后续的执行. 异步:当一个异步调用发出去后,调 ...

  4. NodeJs 异步非阻塞

    一般来说,高并发的解决方案就是提供多线程模型,服务器为每个客户端请求分配一个线程,使用同步 I/O,系统通过线程切换来弥补同步 I/O 调用的时间开销.比如 Apache 就是这种策略,由于 I/O ...

  5. 异步就是异步,根本就没有 异步非阻塞IO这个说法。阻塞 非阻塞,同步I/O 异步I/O 的区别

    先给大家安利一下这个 https://www.ibm.com/developerworks/cn/linux/l-async/ 里面关于 异步非阻塞IO 是错的. 异步就是异步,别扯 异步阻塞 异步非 ...

  6. 线程同步 阻塞 异步 非阻塞(转)

    同步:函数没有执行完不返回,线程被挂起 阻塞:没有收完数据函数不返回,线程也被挂起 异步:函数立即返回,通过事件或是信号通知调用者 非阻塞:函数立即返回,通过select通知调用者 这样看来异步和非阻 ...

  7. 处理大并发之一 对异步非阻塞的理解

    处理大并发之一 对异步非阻塞的理解 在研究nginx和node.js的时候常会遇到异步.非阻塞等,之前自己也经常使用epoll,对其同步与阻塞,异步与非阻塞有了一定的认识,现对参考资料总结下. 首先讨 ...

  8. 基于MFC的socket编程(异步非阻塞通信)

    对于许多初学者来说,网络通信程序的开发,普遍的一个现象就是觉得难以入手.许多概念,诸如:同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)等,初学者往往迷惑不清,只知其 ...

  9. node异步非阻塞的杂谈

    引言 node作为服务器的优势就在于适合处理高并发的请求,对于web网站后台这种I/O密集型的后台尤其有优势,其核心就在于node是一个异步非阻塞模型.关于异步,同步,阻塞,非阻塞这些概念,本文不做讨 ...

最新文章

  1. java和C++的const 和 final 的区别
  2. Maven 的41种骨架功能介绍
  3. 【赠书】掌握人工智能重要主题,深度强化学习实践书籍推荐
  4. 前端面试题 微信小程序
  5. 学习:深入浅出之正则表达式(转)
  6. .net core 文件流保存图片_如何将图片打包成PDF文件进行保存?
  7. -i https://pypi.tuna.tsinghua.edu.cn/simple -U
  8. M1 mac 安装打印机驱动程序
  9. matlab 图像分割
  10. Spring Cloud微服务架构图
  11. 图像处理珍藏版本汇总
  12. 为什么很多企业使用TOM邮箱收发内部邮件?
  13. 几款比较有名的刷流量软件
  14. DB数据库密码怎么破啊~~~求高手帮忙解决下~
  15. UGUI源码解析——DataUtility
  16. win10不兼容 软件 ietest
  17. ## java.lang.IllegalStateException:错误 修改
  18. java控制台输入做界面_Java控制台输入
  19. eICIC和FeICIC
  20. 腾讯编程比赛的试题,喜欢企鹅和编程的要进!

热门文章

  1. JavaScript案例:实现对象的深拷贝
  2. 01_人工智能与机器学习概念介绍
  3. WebAPI面试题总结03
  4. raid6 p和q计算方法
  5. javaweb在线投票系统
  6. 同花顺python_小白学 Python 爬虫(25):爬取股票信息
  7. 小心陷入 MySQL 索引的坑
  8. jquery 自定义函数方法
  9. python 将三维数据转为二维_Python二维数组与三维数组切片详解
  10. 绘制儿童思维导图方法介绍