关于non-blocking IO的问题,请教

Emiyasstar__ 2012-11-25 04:51:09
网上资料说
调用recv()/recvfrom()时;
在non-blocking模式下,如果返回值为-1,且errno == EAGAIN表示没有可接受的数据或很在接受尚未完成;

不过我今天看unp的时候,看上面的图显示,当在non-blocking模式下,没有接受的数据时是非堵塞的,但是有数据到达,在这个接受过程中是堵塞的,只有异步IO才是网上资料说的情况,即任何时候都是非堵塞的

这样理解对不对,网上的资料是错的吧?
...全文
204 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
tonywearme 2012-11-26
  • 打赏
  • 举报
回复
引用 5 楼 Emiyasstar__ 的回复:
引用 3 楼 tonywearme 的回复:异步I/O就是non-blocking I/O,在读写数据的时候可以做其他事情,比如DMA;同步I/O就是blocking I/O,只有读写完成后才可以进行其他操作。网络收发包的同步、异步也是一样的概念。 你这说的还是错的吧,unp告诉我,非堵塞IO是同步IO
http://en.wikipedia.org/wiki/Asynchronous_I/O
赵4老师 2012-11-26
  • 打赏
  • 举报
回复
不要迷信书、考题、老师、回帖; 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!
Emiyasstar__ 2012-11-26
  • 打赏
  • 举报
回复
引用 3 楼 tonywearme 的回复:
异步I/O就是non-blocking I/O,在读写数据的时候可以做其他事情,比如DMA;同步I/O就是blocking I/O,只有读写完成后才可以进行其他操作。网络收发包的同步、异步也是一样的概念。
你这说的还是错的吧,unp告诉我,非堵塞IO是同步IO
zhang691753540 2012-11-26
  • 打赏
  • 举报
回复
IO分为异步,同步;或者是阻塞或非阻塞;这几种关系都是可以相互组合的。non-blocking为非阻塞IO非异步IO。非阻塞需要一个轮询机制来确保IO有没有完成,而异步会是通知的方式告知应用程序IO有没有完成。异步IO目前在linux中有两个实现,glic的AIO以及Linux内核的native异步IO 楼主可以去查看相关资料区分异步和非阻塞
tonywearme 2012-11-25
  • 打赏
  • 举报
回复
异步I/O就是non-blocking I/O,在读写数据的时候可以做其他事情,比如DMA;同步I/O就是blocking I/O,只有读写完成后才可以进行其他操作。网络收发包的同步、异步也是一样的概念。
Emiyasstar__ 2012-11-25
  • 打赏
  • 举报
回复
顺便问下,对于write操作也是一样的吧,实际写的时候还是堵塞的吧
Emiyasstar__ 2012-11-25
  • 打赏
  • 举报
回复
我汗...没个人回答下么。。

69,364

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧