关于线程化库

对于我们做游戏服务器开发的来说,多数都在Linux平台下作开发,经常用到pthreads(Posix Threads)库。Windows下的线程化库没有用过,据说和pthreads多数API都比较类似。提供线程创建、销毁、Join、mutex/临界区、条件变量等。这些api把数据同步和对线程的控制权全部交给程序员,给程序员以极大自由,同时也带来一堆麻烦。除此之外,还有那些比较通用的线程化库呢?

《并发的艺术》里面把线程化库分为两大类:

####1. 显式线程化库(Explicit Threading)

所谓显示化线程库,就是上面提到的pthreads、windows threads,把线程的创建、多线程的同步全权交由程序员自己来处理。一堆API,任你随意堆砌成自己想要的结构。最大的优点就是灵活性比较高,可以随意定制成各种健壮的系统。多数应用开发、游戏开发用到的线程化库一般都用这类API。显示线程化库,给了你自由的同时,也带来了灾难。一把双刃剑,看你会玩不会玩,玩的好可以所向披靡,玩的不好就是引火自焚。数据同步、并发算法的设计全部自己来。

####2. 隐式线程化库(Implicit Threading)

隐式线程化库,是一种抽象层次比较高的线程化库,把线程的创建、数据的同步全部交给库/编译器来实现,程序员只需要专心设计自己的算法,等算法设计完毕,把算法改写为多线程的即可,这种改写一般都是比较简单(当然设计并发算法的时候,要考虑后续改写,不然改造起来也是比较费时的)。比较著名的隐式线程化库有:

除了我们经常用到的显式线程化库,隐式线程化库给我们提供了另外一种选择。当然它们各有千秋,第一种给你绝对的自由,第二种你就必须学会戴着脚镣跳舞,要想并发要么安装数据划分、要么按任务划分。

对于线程化库,我们有很多选择,但记住一条原则:

尽可能使用线程安全的库,不要去重复发明同样的轮子。
David++