文档章节

同步、异步、阻塞、非阻塞

皂白
 皂白
发布于 2017/08/30 11:04
字数 780
阅读 11
收藏 0
点赞 0
评论 0

同步VS异步

网络通信中的同步机制和异步机制是描述通信模式的概念。

  • 同步机制

    • 发送方发送请求后,需要等待接收到接收方返回的响应后,才接着发送下个请求
    • 所有的请求在服务端得到同步,发送方和接收方对请求的处理步调是一致的
  • 异步机制

    • 发送方发送请求后,不等待接收方响应这个请求,就继续发送下个请求
    • 所有来自发送方的请求形成一个队列,接收方处理完成后通知发送方

阻塞VS非阻塞

阻塞和非阻塞用来描述进程处理调用的方式,在网络通信中,主要指网络套接字Socket的阻塞和非阻塞方式,而Socket的实质也就是IO操作。

  • 阻塞
    • 调用结果返回之前,当前线程从运行状态被挂起,一直等到调用结果返回之后,才进入就绪状态
  • 非阻塞
    • 如果调用结果不能马上返回,当前线程也不会被挂起,而是立即返回执行下一个调用

在网络通信中,经常可以看到有人将同步和阻塞等同、异步和非阻塞等同。事实上,这两对概念有一定的区别,不能混淆。两对概念的组合,就会产生四个新的概念,同步阻塞、异步阻塞、同步非阻塞、异步非阻塞。

同步阻塞

发送方向接收方发送请求后,一直等待响应;接收方处理请求时进行的IO操作如果不能马上得到结果,就一直等到返回结果后,才响应发送方,期间不能进行其他工作。

同步非阻塞

发送方向接收方发送请求后,一直等待响应;接收方处理请求时进行的IO操作如果不能马上得到结果,就立即返回,去做其他事情,但由于没有得到请求处理结果,不响应发送方,发送方一直等待。一直到IO操作完成后,接收方获得结果响应发送方后,发送方才进入下一次请求过程。

异步阻塞

发送方向接收方发送请求后,不用等待响应,可以接着进行其他工作;接收方处理请求时进行的IO操作如果不能马上得到结果,就一直等到返回结果后,才响应发送方,期间不能进行其他工作。

异步非阻塞

发送方向接收方发送请求后,不用等待响应,可以继续其他工作;接收方处理请求时进行的IO操作如果不能马上得到结果,也不等待,而是马上返回去做其他事情。当IO操作完成以后,将完成状态和结果通知接收方,接收方再响应发送方。

参考资料

《Nginx高性能Web服务器详解》

© 著作权归作者所有

共有 人打赏支持
皂白
粉丝 29
博文 34
码字总数 19178
作品 0
朝阳
程序员

暂无文章

Linux 技巧:让进程在后台可靠运行的几种方法

WeiboGoogle+用电子邮件发送本页面 12 我们经常会碰到这样的问题,用 telnet/ssh 登录了远程的 Linux 服务器,运行了一些耗时较长的任务, 结果却由于网络的不稳定导致任务中途失败。如何让命...

mskk
4分钟前
0
0
手把手教你利用Nextcloud搭建个人网盘/私有云盘

越来越多的云盘宣布关闭,百度网盘也时不时8秒和谐视频,分享也会提示侵权被和谐。为了解决这些问题,我们可以搭建一个自己的个人网盘(私有云盘),常用的开源框架包括ownCloud,Seafile,N...

flyzy2005
8分钟前
0
0
Confluence 6 配置时间和日期格式

你可以修改你 Confluence 为用户显示的时期和时间格式。设置的句法使用的是 SimpleDateFormat class,请参考 Java SimpleDateFormat 文档中的内容来设置日期和时间格式。 有下面 3 个时间和日...

honeymose
12分钟前
0
0
php seralize unserialize

关于PHP 序列化(serialize)和反序列化(unserialize)出现错误(Error at offset)的解决办法。 首先我们分析一下为什么会出现这个错误: 编码问题 UTF-8: ANSI: 我发现在我的机器上边编码改...

yeahlife
18分钟前
0
0
七、JSP九大内置对象和四个作用域

九大内置对象: request:类型是HttpServletRequest,和Servlet里的HttpServletRequest一模一样。 response:类型是HttpServletResponse,和Servlet里的HttpServletResponse一模一样。JSP里基...

Wakeeee_
21分钟前
0
0
第十四章NFS服务搭建与配置

14.1 NFS介绍 NFS介绍 NFS是Network File System的缩写;这个文件系统是基于网路层面,通过网络层面实现数据同步 NFS最早由Sun公司开发,分2,3,4三个版本,2和3由Sun起草开发,4.0开始Netap...

Linux学习笔记
53分钟前
0
0
双向认证-nginx

1、设置容器 docker run -it --name nginx-test2 -v /home/nginx:/apps -v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro -p 8183:80 -p 7443:443 -d nginx:stable 2、修改nginx配......

hotsmile
54分钟前
0
0
深入了解 Java 自动内存管理机制及性能优化

一图带你看完本文 一、运行时数据区域 首先来看看Java虚拟机所管理的内存包括哪些区域,就像我们要了解一个房子,我们得先知道这个房子大体构造。根据《Java虚拟机规范(Java SE 7 版)》的规...

Java大蜗牛
56分钟前
4
0
SpringBoot | 第六章:常用注解介绍及简单使用

前言 之前几个章节,大部分都是算介绍springboot的一些外围配置,比如日志 配置等。这章节开始,开始总结一些关于springboot的综合开发的知识点。由于SpringBoot本身是基于Spring和SpringMvc...

oKong
56分钟前
12
0
云数据库架构演进与实践

如今,大型企业如金融企业和银行等,在下一代的微服务架构转型要求下,需要基础软件和数据平台能够实现原生的云化,以满足微服务架构的需求。 微服务,也就是一种面向服务的,有特定边界的松...

巨杉数据库
58分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部