几种I/O模型的简单嘀咕

1 select模型

利用select函数我们判断套接字上是否有数据,或者能不能向一个套接字写入数据,之所以采用这个函数是为了防止应用在I/O过程中(例如:send或Recv)被迫进入锁定状态。

例如 我们想测试一个套接字上是否有数据可读,可将其加入readfds集合,再等待select函数完成,select完成后必须判读自己的套接字是否认为readfds集合的一部分。在readfds、writefds、exceptfds中任何两个可以是NULL,但至少有一个不为空。在不为空的集合中至少包含一个套接字句柄,否则select函数没有句柄可以等待。

 

2 WSAAsyncSelect模型

将一些套接字和窗口关联起来,利用窗口的消息机制监听我们对不同的套接字感兴趣的网络事件

 

3 WSAEventSelect模型

把windows的事件对象和我们的套接字关联起来,利用API查询事件对象“受信”还是“未受信”状态,从而判读套接字上是否有网络事件发生

 

4 重叠I/O

发挥操作系统的I/O处理优势,操作系统自己开辟轻量级线程来等待我们关心的网络事件,一旦事件发生操作系统使和套接字对应的事件对象“受信”或者调用我们提供的回调例程(要注意线程是否处于警觉状态)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值