您的位置:首页 > 教育 > 锐评 > 高端手机排行榜2023_网站界面设计说明_百度公司怎么样_东莞做网站seo

高端手机排行榜2023_网站界面设计说明_百度公司怎么样_东莞做网站seo

2024/12/25 10:17:57 来源:https://blog.csdn.net/weixin_41761608/article/details/144693270  浏览:    关键词:高端手机排行榜2023_网站界面设计说明_百度公司怎么样_东莞做网站seo
高端手机排行榜2023_网站界面设计说明_百度公司怎么样_东莞做网站seo

目前Windows支持的I/O复用技术有selectWSAAsyncSelectWSAEventSelectIOCP (完成端口),Linux支持的I/O复用技术有selectpollepoll模型。前面已经详细介绍过这些I/O复用函数的用法,这里讨论一些深层次的内容。
以上列举的I/O复用函数可以分为以下两个级别:
◎ 第1级别:selectpoll

◎ 第2级别:WSAAsyncSelectWSAEventSelectIOCPepoll

这种划分级别的依据是什么呢?

先来分析第1级别的函数。select和poll函数在本质上还是在一定时间内主动查询在一组 socket句柄(一个或是多个)上是否有网络事件(可读事件、可写事件或出错事件等),也就是说,我们必须每隔一段时间就主动做这些检测操作。如果在这段时间内检测到一些网络事件,检测操作消耗的时间就没有白费;如果在这段时间内没有事件呢?那就相当于做了无用功,是对系统资源的一种浪费。原因是,假设一个服务器有多个连接,在CPU 时间片有限的情况下,我们花费了一定时间检测一部分 socket的网络事件,却发现什么事件都没有,而我们在这段时间内可能有其他事情需要处理,那我们为什么要花时间去做这种检测呢?把这个时间用在我们需要做的事情上不是更好吗?

所以对于服务器网络通信组件来说,要想高效,就应该尽量避免花时间主动查询一些socket是否有网络事件,而是等到这些socket有网络事件时让系统主动通知我们,我们再去处理。这就是第2级别的函数做的事情。第2级别的函数相当于变主动查询为被动通知,即网络事件发生时,系统会通知我们处理。只不过第2级别的函数通知我们的方式各不相同,WSAAsyncSelect 函数利用Windows窗口消息队列的事件机制将通知发给我们设置的窗口过程函数,IOCP模型利用GetQueuedCompletionStatus 函数从挂起状态唤醒并返回,epoll 模型利用 epoll_wait 函数返回就绪事件。例如,connect函数发起连接时,如果将连接socket设置为非阻塞模式,程序就不需要等待 connect 函数的返回结果,可以立即返回;等连接完成之后,WSAAsyncSelect 函数会产生FD_CONNECT事件,告知我们连接是否成功,epoll模型会生成EPOLLOUT事件通知我们。又例如,socket有数据可读时,WSAAsyncSelect函数会产生FD_READ事件,epoll模型会产生EPOLLIN事件,等等。

总之,对网络通信组件的性能有高要求时,尽量不要主动查询各个 socket事件,而是等待操作系统通知我们。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com