假设我有几个要监控的套接字。如果我在每个文件描述符上创建 POSIX 文件描述符并为每个文件描述符结构分配一个事件处理程序,我是否需要为每个套接字创建和分配线程?
我的理解是,每当定义的文件描述符上发生事件时,都会调用其事件处理函数。所以不需要线程。我对吗?
最佳答案
“我需要为每个套接字创建并分配线程吗?”这个问题的简单答案没有”。线程是搬起石头砸自己脚的完美方式。
但请看这部分:“[...] 每当定义的文件描述符上发生事件时,其事件处理函数将被调用 [...]”。现在回答以下问题:谁 将调用事件处理程序? 如何您的程序会注意到事件发生了?
当然,您可以为每个描述符创建每个线程,然后使用例如“坐在”它们上面阻塞读取功能。然后在尝试与您的主线程同步时惨死。
但更好的解决方案是让您的主循环步骤之一来检查事件(例如使用select
或poll
函数),然后,对于每个“事件”的描述符,从主循环调用它的处理程序。如果处理程序中的处理不耗时,您可以与线程保持安全距离。
关于C 文件描述符、轮询和线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35069712/