linux下C++ socket网络编程( 五 )
同步异步是对书店老板而言(同步老板不会提醒你找到结果了 , 异步老板会打电话告诉你) , 阻塞和非阻塞是对你而言 。
socket()函数创建套接字时 , 默认的套接字都是阻塞的 , 非阻塞设置方式代码:
//将文件描述符设置为非阻塞方式(利用fcntl函数)
fcntl(sockfd F_SETFL fcntl(sockfd F_GETFD 0)| O_NONBLOCK);
2. epoll
当服务端的人数越来越多 , 会导致资源吃紧 , I/O效率越来越低 , 这时就应该考虑epoll , epoll是Linux内核为处理大量句柄而改进的poll , 是linux特有的I/O函数 。 其特点如下:
1)epoll是Linux下多路复用IO接口select/poll的增强版本 , 其实现和使用方式与select/poll大有不同 , epoll通过一组函数来完成有关任务 , 而不是一个函数 。
2)epoll之所以高效 , 是因为epoll将用户关心的文件描述符放到内核里的一个事件列表中 , 而不是像select/poll每次调用都需要重复传入文件描述符集或事件集(大量拷贝开销) , 比如一个事件发生 , epoll无需遍历整个被监听的描述符集 , 而只需要遍历哪些被内核IO事件异步唤醒而加入就绪队列的描述符集合即可 。
推荐阅读
- Linux|为什么要开发那么多基于Linux的国产系统,直接使用Linux不可以吗?
- 从头学习Linux基础
- 3步教你做个Linux系统,易用性不比Windows差!你学会了吗?
- Linux该如何学习
- Linux在云端是怎么帮助大家工作简单方便的那?
- Linux当前应用的角色-个人环境的使用
- Linux当前应用的角色-企业环境的应用
- 托瓦斯的Linux的发展
- Linux是什么与如何学习
- 国产linux系统有希望了! 韩国也将摆脱微软依赖: 大规模使用linux