一起来学POSIX thread 之 基本概念
1、异步(asynchronous)
异步指互不干扰的事件可以独立的发生,除非事件之间存在着依赖性.生活中存在着大量的异步事件,例如你可以一边喝茶,一边烧开水。异步带来的最大复杂性就是:如果你没有同时执行多个活动,那么异步就没有任何优势可言。如果你开始了一个异步活动,然后什么也不做等待它结束,则你并没有从异步中获得任何好处。
2、并发(concurrency)
并发指事件同时发生,在单核处理器中实际上是串行发生的事件看起来好像同时发生一样。并发操作之间可能是任意交错的,导致程序相互独立地运行(程序间没有依赖性),但是并发并不代表操作的同时进行,然而,并发让程序能利用异步能力的优点,在无关操作运行的过程中继续工作。POSIX线程提供了并发和异步的能力,二者结合就可以容易地写出高速且有良好响应速度的程序。
3、单处理器和多处理器
单处理器(uniprocessor)指一台计算机只有一个编程人员可见的执行单元(处理器)。
多处理器(multiprocessor)指一台计算机拥有多个处理器,它们共享一个指令集和相同的物理内存。
4、并行(parallelism)
并行指并发序列同时执行,换言之,并行是没有交错的。真正的并行只能在多处理器系中存在,但是并发可以在单处理器系统和多处理器系统中存在。并行要求程序能够同时执行多个操作,而并发只要求程序能够假装同时执行多个操作。
5、线程安全和可重入
“线程安全”是指同一段代码在被多个线程调用时不会导致意外的结果,即结果是可预测的。它不要求代码在多个线程中高效的运行,只要求能够安全的执行并或者可预测的结果。大部现存的函数可以利用POSIX thread提供的工具:互斥量、条件变量和线程私有数据来实现线程的安全。
“可重入”有时用来表示“有效的线程安全”,即通过采用比将函数或库转换成一系列区域更为复杂的方式使代码成为线程安全的。通过引入互斥量和线程私有数据可用实现线程安全,但通常需要改变接口来使函数可重入。可重入的函数应该避免依赖任何静态数据,最好避免依赖线程间任何形式的同步。
6、并发系统的基本核心组成
并发系统必须提供基本的核心功能,包括创建并发执行的环境,并在库或者应用程序中对其进行操作控制,以下是任何并发系统都应该具有的基本功能:
“执行环境”是并发实体的状态。并发系统必须提供建立、删除执行环境和独立维护它们状态的方式。它必须能够支持保存一个执行环境,而去执行另一个环境,例如,当程序需要等待外部事件,它必须能够在随后的某个时间重新恢复环境,从上一次执行时的位置开始。
“调度”决定在某个给定的时刻该执行那个环境,并在不同的环境中切换。
“同步”为并发执行环境提供了协调访问共享资源的一种机制。这里的同步和字典中的含义是对立的。通常同步是指“同时发生”,而这里指的是“阻止同时发生”。也许你会发现在“同步”的同义词“协调”——同步就是让线程协调地完成工作的机制。
在POSIX thread中“执行环境”是线程,“调度”是策略和优先级,“同步”是条件变量和互斥量。