如果在单处理器的计算机上使用多线程,可能得不到所期望的结果。例如,考虑图 8.8 中的两个方法。
图 8.8 多线程方法可能更慢些
同时调用方法 A 和方法 B。在单线程的部件中,序列化这些请求,因此 B 要等到 A 完成才会开始。在多线程情况下,这两个活跃线程将争夺对处理器的控制权。
这样,不但平均完成时间明显增加,而且线程之间的切换花费了更多的处理器时间。
问题在于:执行方法 A 和方法 B 需要的时间差不多。在单处理器的机器上,只有执行长短混合的任务,多线程才能比较明显地改善性能。
例如,如果方法 B 只需要三个时间片就能完成,则该系统的用户将认为方法 B 的响应性能有巨大的改善,而执行方法 A 所需的时间只增加了一点点。
在下面的情况下,能够最好地显示出多线程的优点:绝大多数线程在大部分时间是被阻塞的(例如等待文件 I/O 操作),在这种情况下只有一两个线程在同时执行,因而能够迅速地执行。
详细信息 在无用户界面执行(就是指没有用户接口)的部件中可以使用多线程,请参阅“可扩展性与多线程”。