Perl 线程
并行编程要比看上去要难得多。假设我们从一个烹饪书拿出一条菜谱,然后把它转换成某种几十个厨师可以同时工作的东西。那么你有两个实现方法。
一个方法是给每个厨师一个专用的厨房,给它装备原料和器具。对于那些可以很容易分解的菜谱,以及那些可以很容易从一个厨房转到另外一个厨房的食物而言,这个方法很好用,因为它把不同厨师分隔开,互不影响。
另外,你也可以把所有厨师都放在一个厨房里,然后让他们把菜烧出来,让他们混合使用那些东西。这样可能会很乱,尤其是切肉机开始飞转的时候。
这两个方法对应计算机的两种并行编程方法。第一种是 Unix 系统里典型的多进程模型,这种模型里每个控制线索都有自己的一套资源,我们把它们放在一起叫进程。第二种模型是多线程模型,这种模型里每个控制线索和其他控制线索共享资源。或者有些场合可能(或者必须)不共享(资源)。
我们都知道厨师喜欢掌勺;这一点我们明白,因为只有让厨师掌好勺才能实现我们想让他们干的事。但是厨师也需要有组织,不管用什么方法。
Perl 支持上面两种模式的组织形式。本章我们将把它们称为进程模型和线程模型。