简介 |
在共享内存的多处理器结构中,能够用线程来实现并行。对于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 |
一个进程中的全部线程共享相同的地址空间。在不少状况下线程间通讯比进程间通讯更高效和容易。性能
线程应用与非线程应用相比,提供的潜在的性能提高和实际的优点主要经过如下几种方法: