进程、线程概念得理解

参考一: link.
参考二: link.
参考三: 内核堆栈与用户堆栈.
一、用户级线程
什么是用户线程:
用户线程由线程库管理,对内核是透明的。不支持线程(即不支持内核线程)的操作系统上只能用这种方式实现用户线程。
管理用户线程的方法:
线程库在管理线程时,要为用户线程所属的进程创建专用的线程表(存在于用户空间,不在进程的pcb中)。利用线程表中记录的每个线程的程序计数器、堆栈指针,寄存器和状态等,可以完成在用户线程的切换(包括线程的现场保护)。并可以制定属于进程的用户线程调度算法(局限性很大,因为没有计时器,某一线程可能会“永久”运行,其它线性得不到运行)。
用户级线程的阻塞:
如果线程做了引起本地阻塞(我理解是线程库中定义的阻塞)的事情,就会调用同一进程中其它就绪的线程。
如果线程进行了阻塞系统调用,则该进程会被阻塞,进程中的其它线程不能执行。如果线程进行的是非阻塞系统调用,则该线程继续执行,如果不能继续执行(多半是触发了本地阻塞)就执行同一进程中的其它线程。
用户线程优点缺点:
不需要陷入内核,所以切换快。但实现不了用户线程的并行。
二、内核线程
什么是内核线程:
操作系统支持和管理线程时才能有内核线程。内核线程的创建,调度,撤销要由内核来完成。内核线程的线程表(thread table)位于内核中,包括了线程控制块(TCB)(上面的用户线程线程表存在用户空间)。内核线程们公用一个地址空间(3~4G),即内核线程1的逻辑地址空间若和内核线程2的逻辑地址空间使用相同的地址,映射到物理地址也是相同的。内核线程是“独立运行在内核空间的标准进程"
内核线程的种类:
1、线程按周期性间隔运行,检测特定资源的使用,在用量超出或者低于预置的限制时采取行动,这种线程往往负责守护。
2、在线程启动后则一直等待,直到内核线程请求执行某一特定的操作。
3、用来支持LWP,完成不同的调度模型。(见下文)
三、系统调用:
中断处理、进程切换都跟内核线程是不同的概念,中断管理与进程切换都属于内核代码段部分(0~3G),但却不是内核线程。
执行系统调用时还是那个进程,但由用户堆栈切换到了内核堆栈。
四、linux的轻量级线程LWP
轻量级线程(LWP)是一种由内核支持的用户线程。它是基于内核线程的高级抽象,因此只有先支持内核线程,才能有LWP。每一个进程有一个或多个LWPs,每个LWP由一个内核线程支持。由于每个LWP都与一个特定的内核线程关联,因此每个LWP都是一个独立的线程调度单元。即使有一个LWP在系统调用中阻塞,其它LWP也可以被调度,不会影响整个进程的执行。
LWP上如果只有一个”用户线程“,这两个的组合也叫用户线程,这个用户线程是可以被单独调度的,与上文用户线程不同。这是一对一调度模型
线程库可以在每个LWP上都创建”用户级线程“,如果只有一个LWP就是多对一调度模型。如果有多个LWP就是多对对调度模型。
五、协程
由上文可知,用户级线程切换代价(同一个LWP中的用户线程)<内核线程切换代价(包括LWP之间的切换)<进程切换代价。
但用户线程切换也是很慢的,用户线程切换慢的原因是每个都有自己的程序计数器、堆栈指针,寄存器和状态等东西。
协程就没有这些东西,所以协程切换起来很快,一个线程如果拥有多个协程,那并发时就不用付出切换的代价。关于协程库我了解并不多。
协程也是对内核不可见的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值