二、线程

概念

线程

1)进程内细分出多个线程,线程可以实现一个进程内多个功能的并发

2)线程几乎不拥有系统资源,系统资源分配给进程,进程是资源分配的基本单位,线程是调度的基本单位

3)同进程下的线程共享地址空间和资源,并发不需要切换进程环境,降低了系统开销

4)每个线程都有一个线程ID、线程控制块(TCB),也有就绪、阻塞、运行三种基本状态

线程库

为程序员提供创建和管理线程的 API ,实现方式有以下两种:

1)只在用户态运行:在用户空间中提供一个没有内核支持的库。所有代码和数据结构都位于用户空间,调用函数只是调用本地函数

2)需要调用内核态:由操作系统直接支持的内核级的库。库内的代码和数据结构位于内核空间,调用函数会产生系统调用

实现方式

用户级线程

定义:

线程管理的工作由用户态中的线程库完成,内核意识不到线程的存在

优点:

1)用户级线程的切换不需要切换到核心态

2)线程管理的系统开销小,效率高

缺点:

1)当一个用户级线程被阻塞后,整个进程都会被阻塞,并发度不高

2)多个线程不可在多核处理机上并行运行

内核级线程

定义:

线程的运行与管理由内核负责,线程的切换需要在核心态下完成

操作系统为每个内核级线程建立 TCB(线程控制块)进行管理

优点:

1)一个线程被阻塞后,别的线程还可以继续执行,并发能力强

2)多线程可在多核处理机上并行执行

缺点:

线程管理开销大

内核级线程——多线程模型

一对一模型

一个用户级线程映射到一个内核级线程

内核级线程优缺点相同

多对一模型

多个用户级线程映射到一个内核级线程,一个进程只有一个线程

同用户级线程优缺点相同

多对多模型

n 用户级线程映射到 m 个内核级线程(n>=m)

优缺点:

克服了多对一模型并发度不高的缺点(一个阻塞全体阻塞)

克服了一对一模型中一个用户进程占用太多内核级线程,开销太大的缺点

还拥有上述两种模型各自的优点

状态与转换

控制

线程通信:

同一进程中所有线程共享地址空间和全局变量,可直接进行读写操作

线程创建:

用户程序启动时,通常仅有一个“初始化线程”,用于创建新线程。创建新线程时,利用线程创建函数,并提供相应 TCB 参数。创建完成后返回一个 TID

线程终止:

终止线程执行终止操作

线程被终止后并不立即释放资源,只有当进程中的其他线程执行了分离函数后,被终止线程才与资源分离

被终止但尚未释放资源的线程仍可被其他线程调用,重新恢复运行

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇