社区
网络编程
帖子详情
非阻塞和异步是不是同一回事?
sangwf
2006-11-14 10:00:00
谢谢!如果不是,麻烦讲一下区别,谢谢!
...全文
328
14
打赏
收藏
非阻塞和异步是不是同一回事?
谢谢!如果不是,麻烦讲一下区别,谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
末日3000
2007-04-28
打赏
举报
回复
嗯,支持楼上的
elssann
2007-04-27
打赏
举报
回复
还是我来给出正确答案吧,几年前在这里就解答过。
非阻塞IO和异步IO 是两回事。
1:非阻塞IO一般都是在User Mode里完成的,而异步IO是在Kernel Mode里完成的。
2:假设某个socket的发送缓冲区目前空闲的是512KB,而你调用非阻塞IO发送2M的数据,那么只会发出512K,发送了512KB後,函数调用会返回,这时候你需要检测WSAGetLastError和已经发送出去的数据大小,以重新发送剩下的。 而当你调用异步IO的时候,你的数据其实并没有发出去,可以看着这个调用只是在系统内核里作了一个登记,登记后你的调用马上就返回了,并告诉你你的数据正在PENDING。这时候,你可以去做其他的事情,当内核把你的数据发送后,会通知你发送结果是成功还是失败,以及发送出去了多少。
都将近两年时间没有写SOCKET程序了,哎,
关于异步IO的描述肯定是正确的,非阻塞的的描述有点不敢确定是不是正确的。
microyzy
2007-04-27
打赏
举报
回复
有那么复杂嘛。。。本是一回事
mimong_lin
2007-04-25
打赏
举报
回复
哦,可能说得简了。
阻塞与非阻塞,是单个函数的调用结果,
而同步与异步,是多个操作在一起的结果。
真如LS有人说的,非阻塞是异步的基础。
mimong_lin
2007-04-25
打赏
举报
回复
阻塞,是单个函数的调用结果,
而异步,是多个操作在一起的结果。
突发的奇想,不知道是不是。大家指正。
sangwf
2006-11-16
打赏
举报
回复
谢谢,我还是想知道网络阻塞的底层实现。。
rickerliang
2006-11-16
打赏
举报
回复
这个东西大概原理是这样的(不过很古老的原理了,不知道现在还适用不,操作系统的知识)
同步IO,又叫编程IO,在进行IO操作(就是通过系统调用)时,OS把cpu调度到IO操作例程上(IOroutine),cpu时间都花在IO操作上,没有时间理会你的程序,所以你的程序就被阻塞了。
异步IO,实现的机制有很多种,举些例子:IO控制器、DMA等。在进行IO操作时,cpu给IO控制器发送IO操作指令启动IO操作(该指令只负责启动IO操作),之后cpu继续执行你的程序代码(你的代码没有被阻塞);至于IO操作例程则由IO控制器完成。在IO控制器完成IO操作后,给cpu发个中断,通知cpu IO操作完成,由于中断产生了,os可能会调用响应的中断例程来响应中断,这些例程可能是你程序的一个回调函数,又或者是一个setevent调用。
回调函数这个很容易了解,至于setevent情况,你的程序必须要有响应的等待事件的调用(该事件就是IO完成事件了),例如waitforsingleobject或者GetQueuedCompletionStatus(IOCPs)
本人观点,请指正
sangwf
2006-11-16
打赏
举报
回复
那我的阻塞的理解对不对呢?就是底层实现来说,还是使用了异步。谢谢!
rickerliang
2006-11-16
打赏
举报
回复
对于socket来说
阻塞就是同步IO
异步IO:
进行IO系统调用时是非阻塞
sangwf
2006-11-16
打赏
举报
回复
我的理解对么?谢谢!
sangwf
2006-11-15
打赏
举报
回复
进程阻塞,当条件满足时,又会被唤醒。对于socket来说,可能有数据可读就可以唤醒进程,那这个有数据可读的时间怎么得到的呢?是不是又使用了异步来实现?就是等到数据到达之后,给一个通知?谢谢!
danscort2000
2006-11-15
打赏
举报
回复
不是
非阻塞会一直发送到无法发送,然后立即返回
而异步则不管你怎么操作,都立即返回
mimong_lin
2006-11-14
打赏
举报
回复
这个版块讨论过了,你搜一下就可以了。
nuaawenlin
2006-11-14
打赏
举报
回复
非阻塞是进行异步操作的基础
深入理解同步阻塞、同步
非阻塞
、
异步
阻塞、
异步
非阻塞
本文系统阐述了同步阻塞、同步
非阻塞
、
异步
阻塞与
异步
非阻塞
的核心区别,结合编程语言层面的实际应用场景,分析其本质差异与适用条件。通过生动的生活案例和代码逻辑判断方法,帮助开发者准确识别函数类型,并探讨
异步
非阻塞
的真实优势与成本,指出并无绝对优劣,需根据任务特性合理选择。
同步阻塞io、同步
非阻塞
io、
异步
阻塞io和
异步
非阻塞
io详解和区别
本文详细探讨了Java中的三种IO模型:同步阻塞IO、同步
非阻塞
IO和
异步
非阻塞
IO,分析了它们的特点、适用场景和编程示例,强调了
异步
非阻塞
IO在高并发环境中的优势和编程复杂性。
(看了就懂)彻底理解同步、
异步
、阻塞和
非阻塞
的概念
本文详细解析同步与
异步
概念,以及阻塞和
非阻塞
的区别,通过实例和图解帮助读者掌握编程中的核心概念。
同步、
异步
阻塞、
非阻塞
同步和
异步
关注消息通信机制,同步等待结果,
异步
不等待。阻塞与
非阻塞
关注等待数据时的状态,阻塞会等待数据准备,
非阻塞
则直接返回。同步中有阻塞和
非阻塞
之分,
异步
总是
非阻塞
的。真正的
异步
IO是完全由CPU处理,用户线程仅等待完成信号。
同步
异步
/阻塞
非阻塞
本文详细介绍了同步与
异步
、阻塞与
非阻塞
的概念,以及它们在IO模型中的应用。同步关注消息通信机制,
异步
涉及回调或通知获取结果;阻塞和
非阻塞
关注程序等待调用结果时的状态。同步阻塞IO中,调用方等待响应,线程被挂起;
异步
阻塞IO中,调用方发送请求后立即返回,通过回调获取响应,期间线程仍被阻塞;同步
非阻塞
IO中,调用方持续轮询获取结果,线程不被挂起;而
异步
非阻塞
IO则允许调用方在等待回调期间处理其他任务,线程
非阻塞
。
网络编程
18,357
社区成员
64,165
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章