假设我想要监视几个套接字。如果我在每个文件描述符结构上创建POSIX文件描述符并为每个文件描述符结构分配一个事件处理程序,我是否需要创建并为每个套接字分配线程?
我的理解是,只要在定义的文件描述符上发生事件,就会调用其事件处理函数。所以线程不是必需的。我对吗?
答案 0 :(得分:3)
您的问题的简单答案“我是否需要为每个套接字创建和分配线程?”没有”。线是完美的射击自己的方式。
但请看这一部分:“[...]只要在定义的文件描述符上发生事件,其事件处理函数就会被调用[...]”。现在回答问题:谁会调用事件处理程序? 你的程序如何会注意到某个事件发生了?
当然,您可以为每个描述符创建每个线程,并且只需“坐”它们就可以使用例如阻止读取功能。然后死于试图与你的主线同步的恐怖死亡。
但更好的解决方案是让你的一个主循环步骤检查事件(例如使用select
或poll
函数),然后,对于每个描述符从主循环调用它的处理程序是“活动的”。如果处理程序中的处理不耗时,您可以在安全距离处远离线程。