使用线程并非没有代价,使用线程可能会引发数个潜在的严重的问题。除非经过小心设计,多线程程序有着不可预期,测试困难的倾向。
如果你曾经在厨房与别人共事过,你知道,有时候人多反而麻烦。如果你们都做同一件事情,你就必须不断和另一个说话,找出什么已经做了什么还没做;如果两个人做完全不同的事情,情况会比较好一些。即使这样,还是会有问题发生,因为厨房的资源有限,你们必须得先计划好,先了解谁用那个器具那个碗。有时候你必须等待,如果你要的东西正被使用。
写多线程程序有点类似。如果你有许多个线程都处理同一件事情,那么将很容易出错,除非那些工作被很小心地安排过。如果你的线程分别处理不同的事情,他们还是需要共享一些数据结构,或对话框,或文件,或其他什么东西,成功的秘诀是小心地计划,谁要什么?何时要?怎么要?