社区
网络编程
帖子详情
非阻塞和异步是不是同一回事?
sangwf
2006-11-14 10:00:00
谢谢!如果不是,麻烦讲一下区别,谢谢!
...全文
332
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
打赏
举报
回复
非阻塞是进行异步操作的基础
深入理解同步阻塞、同步
非阻塞
、
异步
阻塞、
异步
非阻塞
这篇文章深入探讨了编程语言层面的同步、
异步
、阻塞和
非阻塞
概念。作者首先强调这些概念与操作系统层面的区别,并指出它们都是基于主线程视角来定义的。文章通过清晰的图表和定义,将四种组合模式(同步阻塞、同步
非阻塞
、
异步
阻塞、
异步
非阻塞
)进行了详细区分,并用职场求助的生动案例帮助理解。作者特别指出判断函数类型时需明确交互代码范围,并分享了实用的经验结论:普通函数默认同步阻塞,回调函数通常
异步
,UI回调多为
异步
阻塞,多线程函数默认
非阻塞
等。文章最后强调,在UI领域需避免在回调中编写耗时代码,以防造成应用无响应问题。
(看了就懂)彻底理解同步、
异步
、阻塞和
非阻塞
的概念
彻底理解同步与
异步
,阻塞和
非阻塞
概念 提示:本文章旨在帮助大家理清思路和理解各名词的概念,帮助大家日后的学习 文章目录彻底理解同步与
异步
,阻塞和
非阻塞
概念@[TOC]前言一、同步和
异步
1.同步:2.
异步
:二、阻塞和
非阻塞
1.阻塞:2.
非阻塞
:三、举例深入理解四、图解1.同步阻塞IO:2.
异步
阻塞IO:3.同步
非阻塞
IO:4.
异步
非阻塞
IO:五、总结 前言 在实际的开发中,我们经常会听到同步,
异步
,阻塞,
非阻塞
这些编程概念,每次遇到的时候都会蒙圈,然后就各种查网上似是而非的资料,结果越查越迷糊,大部分文章都千
同步阻塞io、同步
非阻塞
io、
异步
阻塞io和
异步
非阻塞
io详解和区别
同步阻塞 I/O 简单易用,但可能导致性能问题;同步
非阻塞
I/O 可以减少阻塞等待的时间,但需要频繁轮询状态;
异步
非阻塞
I/O 在高并发环境下表现优秀,但编程复杂度较高。
同步、
异步
阻塞、
非阻塞
一、同步、
异步
与阻塞、
非阻塞
同步和
异步
都是基于应用程序所在操作系统处理IO事件所采用的方式,同步是应用程序要直接参与IO读写的操作。
异步
所有的IO读写交给搡作系统去处理,应用程序只需要等待通知。 网上有许多I/O模型的相关文章,主要涉及四个概念,同步,
异步
,阻塞,
非阻塞
。有些文章将这四个作了两两组合,于是就有了:
异步
阻塞和
异步
非阻塞
,可以明确的说,这完全是牵强之理解,无论<Unix网络编程>一书中所列的I/O模式,还是POSIX标准,都没有提这两个概念。
异步
就是
异步
!只有同步才有阻塞和非阻
同步
异步
/阻塞
非阻塞
同步和
异步
,阻塞和
非阻塞
是大家经常会听到的概念,但是它们是从不同维度来描述一件事情,常常很容易混为一谈。 1. 同步和
异步
同步和
异步
描述的是消息通信的机制。 同步 当一个request发送出去以后,会得到一个response,这整个过程就是一个同步调用的过程。哪怕response为空,或者response的返回特别快,但是针对这一次请求而言就是一个同步的调用。
异步
当一个request发送出去以后,没有得到想要的response,而是通过后面的callback、状态或者通知的方式获得结果。可
网络编程
18,356
社区成员
64,165
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章