热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

同步异步阻塞非阻塞,傻傻分不清楚

前言大家做socket编程时,经常会遇到同步异步阻塞非阻塞这种术语,很混乱,大家的解释也是千奇百怪,下面就说下我的理解。应该把它们拆分开来,同步与异步是一个维度,阻塞与非阻塞是

前言

大家做socket编程时,经常会遇到同步 异步 阻塞 非阻塞这种术语,很混乱,大家的解释也是千奇百怪,下面就说下我的理解。

应该把它们拆分开来,同步与异步是一个维度,阻塞与非阻塞是一个维度。

从数据通信角度考虑

判断是阻塞还是非阻塞,主要是看函数没有数据接收时是否立刻返回,比如recv函数,如果它执行的时候有数据就接收数据,然后返回接收到的数据总和。没有数据就一直等待直到有数据。那么就是阻塞的,如果他执行的时候是有数据就接收数据,然后返回接收到的数据总和,没有数据就立刻返回0,那么他就是非阻塞的。

判断是同步还是异步的方法是:
同步:需要用户进程主动将存放在内核缓冲区中的数据拷贝到用户进程中。
异步:内核会自动将数据从内核缓冲区拷贝到用户缓冲区,然后再通知用户。

其他

同步异步也好,阻塞非阻塞也罢,都能说得通,不过同步异步一般范围更大些,既可以指某一特定数据处理过程,也可以指的一个业务处理流程,是一次解决呢还是分批处理。而阻塞非阻塞通常指的是数据接收处理这种特定情况。


推荐阅读
author-avatar
别装了gg_925
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有