即使单核CPU计算机,也能“同时”运行数百个线程。但我们都知道这只不过是操作系统用时间分片玩的一个小把戏。这就是所谓的“并发”。
实际上,一个CPU核心同一时刻,只能执行一个线程,然后操作系统切换上下文,CPU核心开始执行另一个线程的任务。因此给定一个CPU核心,按顺序执行任务A和B比”同时“(并发)执行A和B要快。计算机的“并行“能力取决于CPU的核心数目。一旦线程的数量超过了CPU核心数,再增加线程数目,只会让系统变得更慢,而不是更快。
那么什么时候增加线程的数量可以让系统变得更快呢?当线程的任务有大量的“I/O等待”时,线程总是阻塞着等待磁盘、网络等,此时CPU处于IDLE状态,可以用于服务其他线程。这个时候,增加线程数,“并发”处理任务,可以提高系统处理速度。
总结来说,CPU密集型任务,并行执行的线程数应该尽量和CPU核心数保持一致,否则超过了CPU核心数,再提高线程数也不会提高处理速度,反而因为上下文切换带来的损耗降低处理速度。对于I/O密集型任务,根据I/O的响应速度,适当地调节线程数目,可以提高系统速度。