C 文件描述符、轮询和线程
C file descriptor, Poll and thread
假设我有几个要监视的套接字。如果我在每个文件描述符上创建 POSIX 个文件描述符并为每个文件描述符结构分配一个事件处理程序,我是否需要为每个套接字创建并分配线程?
我的理解是,每当定义的文件描述符上发生事件时,都会调用其事件处理函数。所以不需要线程。我对吗?
您的问题 "Do I need to create and assign thread to each socket?" 的简单答案是 "No"。线程是搬起石头砸自己脚的完美方式。
但是看这部分:"[...] 每当定义的文件描述符上发生事件时,它的事件处理函数将被调用 [...]" .现在回答问题:谁 将调用事件处理程序? 您的程序如何注意到事件发生?
当然,您可以为每个描述符创建每个线程,然后只 "sit" 使用例如阻塞读取功能。然后死于与你的主线程同步的可怕死亡。
但更好的解决方案是让主循环步骤之一检查事件(例如使用select
或poll
函数),以及然后,对于每个 "active" 的描述符,从主循环调用它的处理程序。如果处理程序中的处理不耗时,您可以在安全距离内远离线程。
假设我有几个要监视的套接字。如果我在每个文件描述符上创建 POSIX 个文件描述符并为每个文件描述符结构分配一个事件处理程序,我是否需要为每个套接字创建并分配线程?
我的理解是,每当定义的文件描述符上发生事件时,都会调用其事件处理函数。所以不需要线程。我对吗?
您的问题 "Do I need to create and assign thread to each socket?" 的简单答案是 "No"。线程是搬起石头砸自己脚的完美方式。
但是看这部分:"[...] 每当定义的文件描述符上发生事件时,它的事件处理函数将被调用 [...]" .现在回答问题:谁 将调用事件处理程序? 您的程序如何注意到事件发生?
当然,您可以为每个描述符创建每个线程,然后只 "sit" 使用例如阻塞读取功能。然后死于与你的主线程同步的可怕死亡。
但更好的解决方案是让主循环步骤之一检查事件(例如使用select
或poll
函数),以及然后,对于每个 "active" 的描述符,从主循环调用它的处理程序。如果处理程序中的处理不耗时,您可以在安全距离内远离线程。