Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 当有数千个后台线程时,为什么程序的最佳线程数与内核数有关_Multithreading_Performance_Parallel Processing_Cpu - Fatal编程技术网

Multithreading 当有数千个后台线程时,为什么程序的最佳线程数与内核数有关

Multithreading 当有数千个后台线程时,为什么程序的最佳线程数与内核数有关,multithreading,performance,parallel-processing,cpu,Multithreading,Performance,Parallel Processing,Cpu,我一直在读关于多线程编程和最佳线程数的书。我知道这是非常主观的,根据具体情况而有所不同,只有通过反复试验才能找到真正的最佳方案 然而,我发现很多帖子都说,如果任务是非I/O绑定的,那么 Optimal: numberOf(threads) ~= numberOf(cores) 请看一看 Q)如果成百上千的后台(操作系统/其他东西)线程已经在为轮到他们而斗争,那么上述等式怎么可能有效 Q)线程数量多一点不会增加分配内核的概率吗?最佳值仅适用于正在全速执行的线程。例如,在Windows任务管理器中

我一直在读关于多线程编程和最佳线程数的书。我知道这是非常主观的,根据具体情况而有所不同,只有通过反复试验才能找到真正的最佳方案

然而,我发现很多帖子都说,如果任务是非I/O绑定的,那么

Optimal: numberOf(threads) ~= numberOf(cores)
请看一看

Q)如果成百上千的后台(操作系统/其他东西)线程已经在为轮到他们而斗争,那么上述等式怎么可能有效

Q)线程数量多一点不会增加分配内核的概率吗?

最佳值仅适用于正在全速执行的线程。例如,在Windows任务管理器中使用的1000多个线程都是未执行的线程。它们正在等待通知,阻止同步对象的wait()调用

它包括I/O,但也可以是计时器、驱动程序事件、进程互操作同步对象、等待消息的UI线程等等。后者更不明显,因为它们通常由友好的api包装

编写一个线程数和机器内核数一样多的程序,所有的线程都消耗100%的内核,实际上并不常见。你必须解决那种需要纯计算的问题。真正的程序通常由于执行操作需要读/写数据而陷入困境,或者由于数据到达的速率而受到限制


如果线程消耗100%的内核,那么过度调度处理器不是一个好策略。他们会开始互相争斗,上下文切换开销会导致需要做的工作减少。当他们堵住的时候是好的。阻塞会自动使一个内核可以做其他事情。

其他后台进程并不是真正的“战斗”来获得一个回合,除非您的CPU在桌面空闲时被固定在100%。也就是说,您通常不需要担心被分配一个内核的可能性-大多数情况下,您不会运行多个处理器密集型应用程序。通过增加程序中运行的线程数,假设操作系统中的所有线程都平均共享CPU时间,您基本上是在用吞吐量换取响应能力。您的程序将获得更多的时间片,但同时它将使操作系统消耗更多的实际执行时间来管理它们。当然,对于优先级来说,这一切可能都是徒劳的。澄清一下:“每个核心1个线程”策略的隐含假设是:当来自所有其他进程的所有其他线程都被阻塞/等待时,我的所有应用程序线程都准备好运行时,会有相当长的时间,因此,我的所有线程通常会同时在不同的内核上调度?一般的假设是,您不必与其他进程拥有的线程进行斗争。这是不太现实的,当它发生时,也不会有人感到惊讶,但是,您始终可以配置一台机器,使其非常接近理想状态。只是不要运行那些其他进程。当这很重要时,你会发现,例如,在服务器风格的应用程序中,将一台机器专门用于一项工作肯定是不寻常的。