为每个处理器生成多个线程是否有意义?

Tra*_*rap 8 concurrency multithreading

从逻辑的角度来看,一个应用程序可能需要数十个或数百个线程,其中一些线程将在大多数时间内休眠,但很少有线程将始终同时运行.问题是:产生比系统中的处理器更多的并发线程是否有意义,还是浪费?

我已经看到一些服务器应用程序实现了一个调度程序来逻辑地管理任务(通常称为作业),但也产生了很多线程,所以我没有看到它的好处.

提前致谢.

ben*_*ith 23

当然.如果您的软件经常使用磁盘或网络IO,您通常可以通过添加更多线程来提高吞吐量.当其他线程在IO上阻塞时,那些额外的线程将会唤醒并执行操作.


dmc*_*kee 12

其他人已经谈到了几乎肯定有意义的情况(当你做任何缓慢的IO时).

如果出现以下情况可能不是一个好主意:

  • 你的线程正在进行CPU绑定工作

  • 每个线程都想要使用不重叠的内存(即与高速缓存大小相比显着)

在这种情况下,可能会导致不必要的缓存未命中.


mgh*_*hie 6

这可能是有道理的

  1. 您的程序设计的好处,因为您拥有最好在线程中实现的并行任务,或者

  2. 您的一些线程受I/O限制,因此它们不会自行使用处理器/内核.