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