例如,我有一台带有2个核心的机器。假设我有一个任务队列要清除使用名为ninja
的程序。
以下哪项可以更快地完成工作,即清除队列中的所有任务。
./ninja &
./ninja &
或
运行忍者超过我的核心数
./ninja &
./ninja &
./ninja &
./ninja &
答案 0 :(得分:3)
如果您考虑要执行大量任务,这更容易考虑。你应该运行多少取决于进程实际上在做什么。
如果所有进程都是计算绑定的,则花费相同的时间,并且在并行运行时不消耗整个内存,您希望实时进程计数随时与核心数相匹配。这样,每个核心运行相同的时间,而无需上下文切换到其他处理器。
如果任何时刻的实时进程数超过了计算机的内存可用性,并且它们正在进行计算,那么您只需强制进行大量分页,这将严重损害运行时。
如果进程正在执行大量I / O并且等待事件卡住(磁盘数据读取,输入设备,输出缓冲区完全阻塞),那么您需要更多实时进程以便有进程avaialbe在其他进程被阻止时继续工作。
如果内存需求大小的进程不同,您将首先运行最大的进程,并使用内存需求较少的进程填充内存。这通常很难做到,因为您经常不知道每个进程的内存需求。如果你有很多很多的任务,你可以贪婪地运行一个大的和一个小的适合,从统计学上你可能会做得很好。
如果你只有少数(你显示4),你可以尝试组合并看看。