簡介 |
在共享內存的多處理器結構中,能夠用線程來實現並行。對於UNIX系統, IEEE POSIX 1003.1c標準規定了C語言線程編程接口的標準。這份標準的實現就是POSIX threads, 或者稱爲Pthreads.node
本文開始先介紹線程的基本概念,動機和設計方面的一些考慮。 接下來是Pthreads API 的三個主要部分:線程管理,互斥鎖和 條件變量。本文自始至終會貫穿大量的示例代碼來展現如何使用Pthread API的每一部分。程序員
Pthreads 概述 |
UNIX進程 線程web
線程使用並存在在這些進程資源中,線程能夠被操做系統調用並獨立運行, 很大程度上是由於它只複製了不多量的做爲可執行代碼存在的必須重要資源。編程
一個線程完成獨立的控制流是由於它維護本身擁有的:安全
所以,簡而言之,在UNIX系統環境中一個線程:多線程
同一進程的線程間共享資源,致使:併發
與建立和管理進程的花費相比,建立一個線程只須要較少的系統開銷。管理線程所須要的系統資源原少於管理進程異步
舉例來講,下表是fork() 與 pthread_create()所花時間的對比。 工具
Platform | fork() | pthread_create() | ||||
---|---|---|---|---|---|---|
real | user | sys | real | user | sys | |
Intel 2.6 GHz Xeon E5-2670 (16 cores/node) | 8.1 | 0.1 | 2.9 | 0.9 | 0.2 | 0.3 |
Intel 2.8 GHz Xeon 5660 (12 cores/node) | 4.4 | 0.4 | 4.3 | 0.7 | 0.2 | 0.5 |
AMD 2.3 GHz Opteron (16 cores/node) | 12.5 | 1.0 | 12.5 | 1.2 | 0.2 | 1.3 |
AMD 2.4 GHz Opteron (8 cores/node) | 17.6 | 2.2 | 15.7 | 1.4 | 0.3 | 1.3 |
IBM 4.0 GHz POWER6 (8 cpus/node) | 9.5 | 0.6 | 8.8 | 1.6 | 0.1 | 0.4 |
IBM 1.9 GHz POWER5 p5-575 (8 cpus/node) | 64.2 | 30.7 | 27.6 | 1.7 | 0.6 | 1.1 |
IBM 1.5 GHz POWER4 (8 cpus/node) | 104.5 | 48.6 | 47.2 | 2.1 | 1.0 | 1.5 |
INTEL 2.4 GHz Xeon (2 cpus/node) | 54.9 | 1.5 | 20.8 | 1.6 | 0.7 | 0.9 |
INTEL 1.4 GHz Itanium2 (4 cpus/node) | 54.5 | 1.1 | 22.2 | 2.0 | 1.2 | 0.6 |
一個進程中的全部線程共享相同的地址空間。在不少狀況下線程間通訊比進程間通訊更高效和容易。性能
線程應用與非線程應用相比,提供的潛在的性能提高和實際的優點主要經過如下幾種方法: