首页
|
新闻
|
新品
|
文库
|
方案
|
视频
|
下载
|
商城
|
开发板
|
数据中心
|
座谈新版
|
培训
|
工具
|
博客
|
论坛
|
百科
|
GEC
|
活动
|
主题月
|
电子展
注册
登录
论坛
博客
搜索
帮助
导航
默认风格
uchome
discuz6
GreenM
»
MCU 单片机技术
»
ARM
» 关于进程、线程和轻量级进程,线程模型
返回列表
回复
发帖
发新话题
发布投票
发布悬赏
发布辩论
发布活动
发布视频
发布商品
关于进程、线程和轻量级进程,线程模型
发短消息
加为好友
yuyang911220
当前离线
UID
1029342
帖子
9914
精华
0
积分
4959
阅读权限
90
在线时间
286 小时
注册时间
2014-5-22
最后登录
2017-7-24
论坛元老
UID
1029342
性别
男
1
#
打印
字体大小:
t
T
yuyang911220
发表于 2015-11-22 19:06
|
只看该作者
关于进程、线程和轻量级进程,线程模型
多线程
,
模型
线程模型:
线程 : 进程
n : 1 ,多个线程对应一个核心线程(进程)
1:1, 一个线程对应一个进程
m :n : 结合上面两种方式,如某些进程一一对应核内线程,其他线程完全在用户态实现
在现代OS
中,进程支持多线程。进程是资源管理
的最小单元;而线程是程序执行的最小单元。一个进程的组成实体可以分为两大部分:线程集合资源集。进程中的线程是动态的对象;代表了进程指令的执行。资源,包括地址空间
、打开的文件
、用户信息等等,由进程内的线程共享。
线程有自己的私有数据
:程序计数器,栈空间以及寄存器。
Why Thread?
(传统单线程进程的缺点)
1,现实中有很多需要并发处理的任务,如数据库
的服务器
端、网络
服务器、大容量计算等。
2.
传统的UNIX
进程是单线程的,单线程意味着程序必须是顺序执行,不能并发;既在一个时刻只能运行在一个处理器上,因此不能充分利用多处理器框架的计算机。
3.
如果采用多进程的方法,则有如下问题:
a. fork
一个子进程的消耗是很大的,
fork
是一个昂贵的系统调用,即使使用现代的写时复制
(copy-on-write)技术
。
b.
各个进程拥有自己独立的地址空间,进程间的协作需要复杂的
IPC
技术,如消息传递和共享内存等。
多线程的优缺点
多线程的优点和缺点实际上是对立统一的。
支持多线程的程序
(
进程
)
可以取得真正的并行
(parallelism)
,且由于共享进程的代码和全局数据,故线程间的通信是方便的。它的缺点也是由于线程共享进程的地址空间,因此可能会导致竞争,因此对某一块有多个线程要访问的数据需要一些同步技术。
三种线程——内核线程、轻量级
进程、用户线程
内核线程
内核线程就是内核的分身,一个分身可以处理一件特定事情。这在处理异步事件如异步
IO
时特别有用。内核线程的使用是廉价的,唯一使用的资源就是内核栈和上下文切换时保存寄存器的空间。支持多线程的内核叫做多线程内核
(Multi-Threads kernel )
。
轻量级进程
轻量级线程
(LWP)
是一种由内核支持的用户线程。它是基于内核线程的高级抽象,因此只有先支持内核线程,才能有
LWP
。每一个进程有一个或多个
LWPs
,每个
LWP
由一个内核线程支持。这种模型实际上就是恐龙书上所提到的一对一线程模型。在这种实现的操作系统中,
LWP
就是用户线程。
由于每个
LWP
都与一个特定的内核线程关联,因此每个
LWP
都是一个独立的线程调度单元。即使有一个
LWP
在系统调用中阻塞,也不会影响整个进程的执行。
轻量级进程具有局限性。首先,大多数
LWP
的操作,如建立、析构以及同步,都需要进行系统调用。系统调用的代价相对较高:需要在
user mode
和
kernel mode
中切换。其次,每个
LWP
都需要有一个内核线程支持,因此
LWP
要消耗内核资源(内核线程的栈空间)。因此一个系统不能支持大量的
LWP
。
注:
1: 1模型
LWP
的术语是借自于
SVR4/MP
和
Solaris 2.x
。
有些系统将
LWP
称为虚拟处理器。
将之称为轻量级进程的原因可能是:在内核线程的支持下,
LWP
是独立的调度单元,就像普通的进程一样。所以
LWP
的最大特点还是每个
LWP
都有一个内核线程支持。
用户线程
LWP
虽然本质上属于用户线程,但
LWP
线程库是建立在内核之上的,
LWP
的许多操作都要进行系统调用,因此效率不高。而这里的用户线程指的是完全建立在用户空间的线程库,用户线程的建立,同步,销毁,调度完全在用户空间完成,不需要内核的帮助。因此这种线程的操作是极其快速的且低消耗的。
上图(
N:1模型)
是最初的一个用户线程模型,从中可以看出,进程中包含线程,用户线程在用户空间中实现,内核并没有直接对用户线程进程调度,内核的调度对象和传统进程一样,还是进程本身,内核并不知道用户线程的存在。用户线程之间的调度由在用户空间实现的线程库实现。
这种模型对应着恐龙书中提到的多对一线程模型,其缺点是一个用户线程如果阻塞在系统调用中,则整个进程都将会阻塞。
加强版的用户线程——用户线程
+LWP
这种模型对应着恐龙书中多对多模型。用户线程库还是完全建立在用户空间中,因此用户线程的操作还是很廉价,因此可以建立任意多需要的用户线程。操作系统提供了
LWP
作为用户线程和内核线程之间的桥梁。
LWP
还是和前面提到的一样,具有内核线程支持,是内核的调度单元,并且用户线程的系统调用要通过
LWP
,因此进程中某个用户线程的阻塞不会影响整个进程的执行。用户线程库将建立的用户线程关联到
LWP
上,
LWP
与用户线程的数量不一定一致。当内核调度到某个
LWP
上时,此时与该
LWP
关联的用户线程就被执行。
小结:
很多文献中都认为轻量级进程就是线程,实际上这种说法并不完全正确,从前面的分析中可以看到,只有在用户线程完全由轻量级进程构成时,才可以说轻量级进程就是线程。
收藏
分享
评分
继承事业,薪火相传
回复
引用
订阅
TOP
返回列表
电商论坛
Pine A64
资料下载
方案分享
FAQ
行业应用
消费电子
便携式设备
医疗电子
汽车电子
工业控制
热门技术
智能可穿戴
3D打印
智能家居
综合设计
示波器技术
存储器
电子制造
计算机和外设
软件开发
分立器件
传感器技术
无源元件
资料共享
PCB综合技术
综合技术交流
EDA
MCU 单片机技术
ST MCU
Freescale MCU
NXP MCU
新唐 MCU
MIPS
X86
ARM
PowerPC
DSP技术
嵌入式技术
FPGA/CPLD可编程逻辑
模拟电路
数字电路
富士通半导体FRAM 铁电存储器“免费样片”使用心得
电源与功率管理
LED技术
测试测量
通信技术
3G
无线技术
微波在线
综合交流区
职场驿站
活动专区
在线座谈交流区
紧缺人才培训课程交流区
意见和建议