Zif*_*ion 47
select()
当您必须处理多个事件源时,该功能允许您实现事件驱动的设计模式.
假设您要编写一个程序来响应来自多个事件源的事件,例如网络(通过套接字),用户输入(通过stdin),其他程序(通过管道),或任何其他可以由a表示的事件源fd
.您可以启动单独的线程来处理每个事件源,但您必须管理线程并处理并发问题.另一种选择是使用一种机制,你可以将所有的聚合fd
成一个实体fdset
,然后只需调用一个函数来等待fdset
.只要事件发生在任何一个上,该函数就会返回fd
.您可以检查fd
发生了哪个事件,然后阅读fd
,处理事件,并回应它.完成后,你会回去坐在那个等待功能中 - 直到某些人fd
到达另一个事件.
select
设施就是这样一种机制,select()
功能就是等待功能.您可以在任意数量的书籍和在线资源中找到有关如何使用它的详细信息.
select函数允许您检查几个不同的套接字或管道(如果您不在窗口,则根本不检查任何文件描述符),并根据先准备好的任何东西执行某些操作.更具体地说,select函数的参数分为三组:
阅读:当此类别中的任何文件描述符准备好阅读时,选择将返回给您.
写入:当此类别中的任何文件描述符准备好写入时,选择将返回给您.
例外:当此类别中的任何文件描述符具有异常情况时 - 即,它们不正常地关闭,连接断开,或者它们有其他错误 - 选择将返回给您.
select的强大之处在于单个文件/套接字/管道功能经常被阻塞.Select允许您监视多个不同文件描述符的活动,而无需将程序的线程专用于每个函数调用.
为了让你得到一个更具体的答案,你可能不得不提到你正在编程的语言.我试图在概念层面尽可能地给出答案.
select()是轮询套接字以读取新数据或打开TCP窗口进行写入的低技术手段。除非有令人信服的理由,否则最好使用poll()或epoll_wait()(如果您的平台具有此功能),以获得更好的性能。
归档时间: |
|
查看次数: |
23280 次 |
最近记录: |