之前用Rayon, 就知道这个线程池的模型是基于Work Stealing的: http://smallcultfollowing.com/babysteps/blog/2015/12/18/rayon-data-parallelism-in-rust/ , 昨天遇到了"魔鬼", 问了我这个问题, 一时没答好, 甚是丢人, 特此分享一下: https://en.wikipedia.org/wiki/Work_stealing
直观的讲, 线程池中的每个Worker都拥有一个Local Queue, 所谓的本地任务队列, 然后Worker发现如果自己的队列不空就优先从自己的队列中抽取任务执行, 如果发现自己的队列为空就尝试去偷工友的任务拿来做, 这样大家都能忙起来不至于空闲.