我有一些长期运行的操作,数以百计。目前,他们每个人都在自己的线程上。我使用线程的主要目标不是加快这些操作。在这种情况下,更重要的是它们似乎同时运行。
我知道协作式多任务处理和光纤。但是,我试图避免任何需要在操作中接触代码的事情,例如在它们中添加yieldToScheduler()
. 我也不想规定这些例程被程式化以被编码以发出一口大小的任务项队列......我想将它们视为黑匣子。
目前我可以忍受这些缺点:
- 最大线程数往往为 O(1000)
- 每个线程的成本是 O(1MB)
为了解决由于上下文切换导致的糟糕缓存性能,我确实有一个计时器的想法,它可以调整优先级,使得只有IdealThreadCount()线程处于正常优先级,所有其余线程都设置为空闲。这会让我扩大时间片,这意味着更少的上下文切换并且仍然可以满足我的目的。
问题1:这是个好主意吗?一个肯定的缺点是它不能在 Linux 上工作(文档说不QThread::setPriority()
在那里)。
问题2:还有其他想法或方法吗?QtConcurrent 是否在考虑这种情况?
(一些相关阅读:how-many-threads-does-it-take-to-make-them-a-bad-choice,many-threads-or-as-few-threads-as-possible,maximum-number-of -threads-per-process-in-linux )