9.3.5 小结

多线程编程属于比较复杂的程序设计任务,即使对专家也不是容易的事情。这是因为多 线程在执行上具有不确定性,线程一旦启动,他们之间的相互依赖和相互作用的结果就是不 可预测的。《西游记》中的这段描写或许能帮助读者想象多线程并发执行的复杂性:

悟空见他凶猛,即使身外身法,拔一把毫毛,丢在口中嚼碎,望空喷去,叫一声“变”! 即变做三二百个小猴……把个魔王围绕,抱的抱,扯的扯,钻裆的钻裆,扳脚的扳脚, 踢打挦毛,抠眼睛,捻鼻子,抬鼓弄,直打做一个攒盘。

不过,有很多看似需要并发计算的问题实际上可以用事件驱动(参见第 8 章)而不是用 线程来编程。事件驱动在多数情况下更容易实现,因为事件驱动只有一个执行流,没有并发 及同步问题。涉及 GUI 的问题就可以用事件驱动来解决,而科学计算的并行化则适合用多 线程来解决。总之,应当只在真的需要并发计算时才使用线程。