【发布时间】:2015-08-06 06:37:06
【问题描述】:
我正在编写一个同时处理 UDP 和 TCP 连接的服务器,并编写了一个作为服务器基础的基本线程池库。我有一个侦听器线程,它执行系统调用的accept/recvfrom(分别用于TCP和UDP)并将任务推送到线程池,但我认为n个工作线程的一个侦听器线程不会很好地执行,因为n增加超过50或60线程。例如,如果我有一个实例化的 UDP 服务器,它有 60 个工作线程和一个执行 recvfrom 的侦听器线程。如果处理器需要在所有这些线程之间进行上下文切换,我担心的是 -
侦听器线程将花费更多时间计划外,因此将丢弃比可接受的更多数据包
由于只有 1 个线程正在侦听,因此大多数工作线程将没有要执行的任务,因此大部分时间都在休眠
听众和工人的比例是多少?我如何确定这个比率?
【问题讨论】:
-
“听众和工人的比例是多少?” 抱歉,没有现成的公式。这完全取决于您的实际用例、部署和要求。
-
修正了我的问题。我以为没有公式。但是,我不知道如何确定这个比率。
-
“监听线程”到底是什么意思?一个调用
accept()来监听传入连接的线程?还是一个线程来监听来自已连接客户端的数据? -
前者,在 TCP 和 UDP 的情况下,侦听器调用 recvfrom 并将结果数据推送到线程池
-
一个技巧就是让监听线程以比消费者更高的调度程序优先级运行,因此它总是抢占他们
标签: c++ multithreading sockets networking