线程介绍
Intro
20世纪60年代人们提出了进程的概念,到20世纪80年代中期人们提出了比进程更小的能独立运行的基本单位——线程,试图用它来提高系统内程序并发执行的程度从而进一步提高系统的吞吐量。
线程具有传统进程所具有的特征,所以称之为轻型进程或进程元,相应的把传统进程称之为重型进程。
一个进程可以拥有若干个线程,至少一个。
线程的属性
- 轻型实体
- 独立调度和分派的基本单位
- 可并发执行
- 共享进程资源
进程与线程的比较
-
调度
进度是资源分配的基本单位,线程是调度和分派的基本单位,线程几乎不拥有系统资源更轻量级,能显著提高系统的并发程度。
在同一个进程中,线程的切换不会引起进程的切换。但从一个进程中的线程切换到另外一个进程中的线程时会引起进程的切换。
-
并发行
进程和线程都可以并发执行,这使得操作系统具有良好的并发性,从而能够更加有效的提高系统资源的利用率和系统的吞吐量。引入线程使得系统具体更好的并发性
-
资源
进程是拥有资源的基本单位,线程几乎不拥有系统资源,但是可以访问它隶属的进程的资源,进程的资源可以供该进程下的所有线程所共享
-
系统开销
创建或撤销进程时,系统都要为之创建和回收进程控制块,分配和回收资源如内存空间和I/O设备等,操作系统所付出的开销明显大于线程创建或撤销时的开销。
进程的切换也会比线程的切换更费时,进程切换的代价比线程切换要高。
一个进程中的多个线程具有相同的地址空间,在同步和通信的实现方面也比进程容易。
线程间的同步
- 互斥锁(mutex)
- 条件变量
- 信号量
- 私用信号量(同一进程内线程同步,进程内可见OS不知道,OS不会自动回收未释放的信号量)
- 公用信号量(不同进程间线程同步,OS会自动回收未释放的信号量,较安全)