社区
网络编程
帖子详情
完成端口模型与非阻塞模式的关系是什么呢?
beacon_hu
2008-08-31 09:56:15
1。是不是用了“完成端口模型”就是“非阻塞模式”了呢?
如果是的话,那为什么在“完成端口模型”中没看到ioctlsocket呢?
2。非阻塞模式有那么多的好处,那么为什么需要阻塞模式呢?什么时候需要用到阻塞模式呢?
谢谢!!!
...全文
289
8
打赏
收藏
完成端口模型与非阻塞模式的关系是什么呢?
1。是不是用了“完成端口模型”就是“非阻塞模式”了呢? 如果是的话,那为什么在“完成端口模型”中没看到ioctlsocket呢? 2。非阻塞模式有那么多的好处,那么为什么需要阻塞模式呢?什么时候需要用到阻塞模式呢? 谢谢!!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
三十三岁又新生
2009-03-24
打赏
举报
回复
[Quote=引用 4 楼 beacon_hu 的回复:]
<1>
SOCKET s;
s = socket(AF_INET,SOCK_STREAM,IPPROTO_IP);//默认为阻塞模式
ioctlsocket(s,FIONBIO,1);//s被设置为非阻塞模式
send(s,buf,len,flags);//s被设为非阻塞模式后,直至再次把s设为阻塞前,其后续操作如send,recv等都是非阻塞的。
<2>
SOCKET s;
s = WSASocket(AF_INET,SOCK_STREAM,IPPROTO_IP,NULL,0,WSA_FLAG_OVERLAPPED);//s被允许重叠IO
WSASend(s,buf,1,numberOfBytesSent,flag,overlapped…
[/Quote]
你好,我最近也在学习socket,遇到了和你一样的疑问。感觉你说的有些问题吧,怎么我在调试状态下,发现没有经过Ioctlsocket设置非阻塞模式的就是阻塞的,不是设置了Overlapped标志就是非阻塞的了。我都搞糊涂了。到底怎么回事。感觉1楼的说得还是蛮准确的。
JazzDynasty
2008-08-31
打赏
举报
回复
完成端口中使用的是重叠I/O模型,而重叠I/O摸型本来用的就是得非阻塞模式。
普通套接字创建后默认为阻塞模式,阻塞模式的套接字用于少量数据接收和发送的简单网络程序开发。
yyunffu
2008-08-31
打赏
举报
回复
套接字的模式和模型是两回事。
模式指套接字相关API本身行为是阻塞或非阻塞。而IO模型是为了弥补套接字模式的某些不足而出现的。
WinEggDrop
2008-08-31
打赏
举报
回复
[Quote=引用楼主 beacon_hu 的帖子:]
1。是不是用了“完成端口模型”就是“非阻塞模式”了呢?
如果是的话,那为什么在“完成端口模型”中没看到ioctlsocket呢?
2。非阻塞模式有那么多的好处,那么为什么需要阻塞模式呢?什么时候需要用到阻塞模式呢?
谢谢!!!
[/Quote]
1.完成端口模型,如果用于网络socket的话,将socket加入到完成端口中处理,socket就是非阻塞并且是支持重叠I/O操作的了.但完成端口模型并一定是用于网络socket,因为这模型面向的是句柄,所以一样可以处理文件等,如果说要处理的是文件句柄等,那你的问题就不成立了.
2.
A.阻塞模式简单,易用,对于初学者容易上手.
B.编写同类型的程序,一般程序员使用完成端口模型无论在编写还是维护上,都要花费更长的时间(除非是使用完成端口模型的高手).在商言商,开长和维护时间更短,更简单,节省更多成本.
C.并不是所有程序都需要使用完成端口模型的,如果一般的阻塞模式也能很好地工作,那么用完成端口模型是"大材小用".
JazzDynasty
2008-08-31
打赏
举报
回复
[Quote=引用 4 楼 beacon_hu 的回复:]
<1>
SOCKET s;
s = socket(AF_INET,SOCK_STREAM,IPPROTO_IP);//默认为阻塞模式
ioctlsocket(s,FIONBIO,1);//s被设置为非阻塞模式
send(s,buf,len,flags);//s被设为非阻塞模式后,直至再次把s设为阻塞前,其后续操作如send,recv等都是非阻塞的。
<2>
SOCKET s;
s = WSASocket(AF_INET,SOCK_STREAM,IPPROTO_IP,NULL,0,WSA_FLAG_OVERLAPPED);//s被允许重叠IO
WSASend(s,buf,1,numberOfBytesSent,flag,overlapped…
[/Quote]
完全正确!
yyunffu
2008-08-31
打赏
举报
回复
没错,是你注释那样。
beacon_hu
2008-08-31
打赏
举报
回复
<1>
SOCKET s;
s = socket(AF_INET,SOCK_STREAM,IPPROTO_IP);//默认为阻塞模式
ioctlsocket(s,FIONBIO,1);//s被设置为非阻塞模式
send(s,buf,len,flags);//s被设为非阻塞模式后,直至再次把s设为阻塞前,其后续操作如send,recv等都是非阻塞的。
<2>
SOCKET s;
s = WSASocket(AF_INET,SOCK_STREAM,IPPROTO_IP,NULL,0,WSA_FLAG_OVERLAPPED);//s被允许重叠IO
WSASend(s,buf,1,numberOfBytesSent,flag,overlapped,NULL);//在重叠套接字上的操作,如WSASend,WSARecv等,如果填写了overlapped结构作为参数,都是重叠IO操作的。同时,这些操作也是非阻塞的,不需要显式调用ioctlsocket。
以上注释是我的理解。是这样吗?
jameshooo
2008-08-31
打赏
举报
回复
[Quote=引用 2 楼 JazzDynasty 的回复:]
完成端口中使用的是重叠I/O模型,而重叠I/O摸型本来用的就是得非阻塞模式。
普通套接字创建后默认为阻塞模式,阻塞模式的套接字用于少量数据接收和发送的简单网络程序开发。
[/Quote]
完成
端口
模型
的理解
完成
端口
的优点 1. 我想只要是写过或者想要写C/S
模式
网络服务器端的朋友,都应该或多或少的听过
完成
端口
的大名吧,
完成
端口
会充分利用Windows内核来进行I/O的调度,是用于C/S通信
模式
中性能最好的网络通信
模型
,没有之一;甚至连和它性能接近的通信
模型
都没有。 2.
完成
端口
和其他网络通信方式最大的区别在哪里呢? (1) 首先,如果使用“同步...
socket/io(3)、socket阻塞与
非阻塞
,同步与异步、I/O
模型
socket阻塞与
非阻塞
,同步与异步 作者:huangguisu 1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/
非阻塞
(Unblock)四种调用方式: 同步: 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一件做完了才能
Socket通信(TCP)
非阻塞
模式
-select
模型
原文地址:Socket通信(TCP)
非阻塞
模式
-select
模型
这个范例是个基于TCP协议的
非阻塞
模式
下的SOCKET通信。 应该非常具有代表性了,分为服务器端和客户端。
非阻塞
类型: Select
模型
//////////////////////////////////////////// // // TCP Server select
非阻塞
模式
//
完成
端口
(CompletionPort)详解
一.
完成
端口
的优点 1. 我想只要是写过或者想要写C/S
模式
网络服务器端的朋友,都应该或多或少的听过
完成
端口
的大名吧,
完成
端口
会充分利用Windows内核来进行I/O的调度,是用于C/S通信
模式
中性能最好的网络通信
模型
,没有之一;甚至连和它性能接近的通信
模型
都没有。
完成
端口
和其他网络通信方式最大的区别在哪里呢? (1) 首先,如果使用“同步”的方式来通信的话,这里说的同步的方式就是说所有的操作都在一个线程内顺序执行
完成
,这么做缺点是很明显的:因为同步的通信操作会阻塞住来自同一个线程的任何其他操作,只
再临SpringBoot——同步异步、阻塞
非阻塞
、NIO与Reactor
模式
文章目录同步、异步、阻塞、
非阻塞
Proactor 与 Reactor
模式
ReactorProactorNIO 同步、异步、阻塞、
非阻塞
在高性能的I/O设计中,有两个比较著名的
模式
Reactor和Proactor
模式
,其中Reactor
模式
用于同步I/O,而Proactor运用于异步I/O操作。 在比较这两个
模式
之前,我们首先的搞明白几个概念,什么是阻塞和
非阻塞
,什么是同步和异步? 同步和异步是...
网络编程
18,357
社区成员
64,164
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章