C文件描述符,轮询和线程

时间:2016-01-28 18:56:16

标签: c linux sockets posix

假设我想要监视几个套接字。如果我在每个文件描述符结构上创建POSIX文件描述符并为每个文件描述符结构分配一个事件处理程序,我是否需要创建并为每个套接字分配线程?

我的理解是,只要在定义的文件描述符上发生事件,就会调用其事件处理函数。所以线程不是必需的。我对吗?

1 个答案:

答案 0 :(得分:3)

您的问题的简单答案“我是否需要为每个套接字创建和分配线程?”没有”。线是完美的射击自己的方式。

但请看这一部分:“[...]只要在定义的文件描述符上发生事件,其事件处理函数就会被调用[...]”。现在回答问题:会调用事件处理程序? 你的程序如何会注意到某个事件发生了?

当然,您可以为每个描述符创建每个线程,并且只需“坐”它们就可以使用例如阻止读取功能。然后死于试图与你的主线同步的恐怖死亡。

但更好的解决方案是让你的一个主循环步骤检查事件(例如使用selectpoll函数),然后,对于每个描述符从主循环调用它的处理程序是“活动的”。如果处理程序中的处理不耗时,您可以在安全距离处远离线程。