Windows IO模型-Select模型(同步阻塞模型)
来源:互联网 发布:交行信用卡 知乎 编辑:程序博客网 时间:2024/06/05 11:29
参考博客:http://zxxapple.iteye.com/blog/1554692 套接字Select
阻塞和非阻塞的区别在于:进程访问数据时,数据未就绪,进行是否需要等待。阻塞:进程等到有结果再返回,函数返回。非阻塞:请求完立即返回,不论是否接收到数据。
异步和同步的区别在于:主动查看还是被动通知的区别,访问数据的机制不同。同步:主动请求,并等待I\O操作完毕,当数据读写时阻塞。异步:主动投递请求后可以,可处理其它事情,被调用者通过状态、事件、回调函数来通知被调用者。读取数据不阻塞。
Select 模型(同步阻塞模型)
Select按顺序查看数组中socket的状态,将发生网络事件的socket留在数组中,可以解决一个服务器对多个客户端的问题。
同步阻塞的优点:能够保证数据及时到达,配合多进程。
同步阻塞的缺点:1.处理客户端数量有限(64) 2.占用太多cpu时间,仍属于阻塞;FD_SETSIZE 64
适用范围:适合小型网络通信。
typedef UINT_PTR SOCKET
typedef unsigned int UINT_PTR
Select同步阻塞 头文件<Winsock2.h>
int select(
_In_ int nfds, //Ignored
_Inout_ fd_set *readfds, //读缓冲区---有数据要接收
_Inout_ fd_set *writefds, //写缓冲区
_Inout_ fd_set *exceptfds, //处理错误的集合
_In_const struct timeval *timeout //阻塞时间,希望查看数组查看多久
);
typedef struct timeval {
long tv_sec; //秒,
long tv_usec; //毫秒
} timeval;
新建集合:fd_set fdsets;
清空集合:FD_ZERO(&fdsets);
将socket,加入到集合中FD_SET(sock,&fdsets);
查看socket是否在集合内:FD_ISSET(sock,&fdsets);
从集合中删除一个文件描述符:FD_CLR(sock,&fdsets);
使用示例:
//主线程中;
SOCKET s=accet(socketListen,....); //默认创建的socket为阻塞模式;
//记录accept到的socket。
.....
//工作线程中
fd_set set;
TIMEVAL tv;
tv.tv_sec = 0;
Tv.tv_usec = 100;
while(1)
{
FD_ZERO(&set); //将你的套节字集合清空
FD_SET(s, &set); //将套接字加入到集合,这里是一个读数据的套节字s
select(0,&set,NULL,NULL,&tv); //检查套节字是否可读,集合中只保留满足条件的套接字
//阻塞时间,数组查看多久//这里select是否出错没有写
if(FD_ISSET(s, &set) )//检查s是否在这个集合里面,
{
recv(s,...); //把数据拷到进程时,阻塞.
}
//do something here
}
- Windows IO模型-Select模型(同步阻塞模型)
- Windows IO模型-WSAAsynSelect模型(异步阻塞模型)
- Windows IO模型-WSAEventSelect模型(异步阻塞模型)
- IO模型:同步、异步、阻塞、非阻塞
- 网络IO模型(同步异步,阻塞非阻塞)
- IO模型(同步,异步,阻塞,非阻塞)
- linux基础编程:IO模型:阻塞/非阻塞/IO复用 同步/异步 Select/Epoll/AIO
- linux基础编程:IO模型:阻塞/非阻塞/IO复用 同步/异步 Select/Epoll/AIO
- linux基础编程:IO模型:阻塞/非阻塞/IO复用 同步/异步 Select/Epoll/AIO
- linux基础编程:IO模型:阻塞/非阻塞/IO复用 同步/异步 Select/Epoll/AIO
- Java网络编程 - 同步阻塞IO模型
- winsock IO模型 select模型
- winsock IO模型 select模型
- socket阻塞/非阻塞,同步/异步,io模型
- IO模型:同步与异步,阻塞与非阻塞
- 【IO模型探讨】阻塞,非阻塞,同步,异步
- IO 模型简介(理解阻塞、非阻塞、同步、异步)
- 深度理解IO模型-同步异步,阻塞非阻塞
- 异步与并行~CancellationTokenSource对线程的作用
- 《UNIX网络编程 卷2》 笔记: 读写锁及其实现
- [编程题]创造新世界/牛客网/Python/解题报告+源代码
- Fragment 动画
- spark整合hbase
- Windows IO模型-Select模型(同步阻塞模型)
- centos7多终端gnome桌面
- 第一周、课时5:js中的变量和数据类型
- GBDT和随机森林的区别
- Tensorflow之池化函数汇总
- LeetCode:526. Beautiful Arrangement
- es6 itaertor遍历器
- 继承性
- [bzoj2226] LCMSum 数学+筛法