我正在编写一个具有多个生产者、单个消费者模型的应用程序(多个线程将消息发送到单个文件编写器线程)。
每个生产者线程包含两个队列,一个用于写入,一个用于读取。消费者线程的每个循环,它遍历每个生产者并锁定该生产者的互斥体,交换队列,解锁并从生产者不再使用的队列中写出。
在消费者线程的循环中,它在处理完所有生产者线程后休眠一段指定的时间。我立即注意到的一件事是,当我从 1 个生产者线程移动到 2 个生产者线程时,生产者将某些内容写入队列并返回的平均时间显着增加(增加了 5 倍)。随着添加更多线程,这个平均时间会减少,直到它触底out - 10 个制作人与 15 个制作人花费的时间没有太大区别。这大概是因为有更多的生产者要处理,生产者线程的互斥体的争用较少。
不幸的是,拥有 < 5 个生产者是应用程序相当常见的场景,我想优化睡眠时间,以便无论存在多少生产者,我都能获得合理的性能。我注意到,通过增加睡眠时间,我可以在生产者数量少的情况下获得更好的性能,但对于生产者数量较多的情况,性能会更差。
有没有其他人遇到过这种情况,如果有,您的解决方案是什么?我试过用线程数来调整睡眠时间,但它似乎有点机器特定的并且相当反复试验。