我正在开发基于对称线程思想的多线程软件。这里所有线程都将运行相同的过程。线程可以有以下工作要做
- 处理定时器消息
- 从套接字 fd 接收消息
- 从发送 Q 发送消息
- 投票工作
我们将有一个共享工作 Q,任何线程都可以从中挑选工作并开始执行。如果空闲线程发现没有可用的工作,它将轮询工作。
从 fd 读取数据时,一个线程将继续读取直到它获得 EAGAIN。当所有 fd 都获得相似数量的数据时,该软件运行良好。
当某些 fd 上有更多数据时。一些线程忙于为同一个 fd 提供服务,并且某些 fd 长时间未处理。这会导致临时缓冲区(例如,用于在获取 EAGAIN 时保持消息的缓冲区)填满,从而使系统不稳定。为了解决这个问题,我现在考虑在(对称)线程开始工作时只处理可配置数量的消息。不幸的是,fds 上的流量无法预测,因此可能需要大量实验才能使其适合某些网络条件。有没有其他方法可以确保(动态)对称线程在相当长的时间内处理所有 fd。如果您可以向我发送任何讨论链接,我将不胜感激,您以前处理类似场景的经验或您可能为处理此场景而开发的算法的详细信息。
看待问题的另一种方式是,
我有一个线程池和 fds 池。一些 fds 比其他 fds 有更多的数据要读/写。我想以这样的方式分配线程,具有更多数据的 fds 由更多数量的线程处理(尽管我将不得不解决并发问题)。这样,更多的 cpu 周期将分配给 fd,并有更多的数据要传输。解决此问题的一种方法是您有关 fds 的信息(哪个对等方将发送多少数据),但这是静态信息,只要 fds 的行为符合假设,它就会起作用。如果可能的话,我想开发一些动态方案。