epoll:我必须使用多线程吗
epoll: must I use multi-threading
我从 here 那里获得了关于 epoll
的基本知识。我知道epoll
可以监控多个FD并处理它们
我的问题是:重事件会阻塞服务器所以我必须使用多线程吗?
例如,服务器的epoll
正在监视2个套接字A和B。现在A开始向服务器发送大量消息,因此服务器开始读取它们。一秒钟后,B 也开始发送消息,而 A 仍在发送。在这种情况下,我需要为这些读取操作创建一个线程吗?如果我不这样做,是否意味着在 A 完成发送之前服务器没有机会从 B 获取消息?
如果您可以足够快地处理传入消息(没有阻塞调用,没有繁重的计算),则不需要单独的线程。否则,您将受益于多线程。
无论如何,了解当您只有一个线程并且无法足够快地处理消息时会发生什么情况会有所帮助。如果您使用 TCP 协议,向您发送数据的机器只会降低它们的传输速率。使用 UDP 时,一些传入的数据包将被丢弃。
我从 here 那里获得了关于 epoll
的基本知识。我知道epoll
可以监控多个FD并处理它们
我的问题是:重事件会阻塞服务器所以我必须使用多线程吗?
例如,服务器的epoll
正在监视2个套接字A和B。现在A开始向服务器发送大量消息,因此服务器开始读取它们。一秒钟后,B 也开始发送消息,而 A 仍在发送。在这种情况下,我需要为这些读取操作创建一个线程吗?如果我不这样做,是否意味着在 A 完成发送之前服务器没有机会从 B 获取消息?
如果您可以足够快地处理传入消息(没有阻塞调用,没有繁重的计算),则不需要单独的线程。否则,您将受益于多线程。
无论如何,了解当您只有一个线程并且无法足够快地处理消息时会发生什么情况会有所帮助。如果您使用 TCP 协议,向您发送数据的机器只会降低它们的传输速率。使用 UDP 时,一些传入的数据包将被丢弃。