默认情况下,spark执行器使用最大大小为20亿的缓存线程池。因此,创建了许多线程,并且它们等待核心在执行之前是免费的。
如果我要使用FixedThreadPool
,我的遗嘱执行人将只有coreThreads
(coreThreads == maxThreads
用于FixedThreadPool)。让我们说我选择给线程数略多于核心数。现在,在提交任务时,不会有自由线程,任务将等待线程可用。只要线程可用,任务就会与线程相关联,然后执行。
我的问题是,表现明智哪两个更好? CachedPool导致线程等待,而FixedPool导致任务等待。是否有任何低级细节将线程等待与任务等待分开?