线程

线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。

每个进程都有自己的独立的地址空间和控制线程,由系统进行管理。而同一进程里的多个线程则共享该进程的地址空间,并由进程进行管理。

为什么要有线程:

(1)并行实体共享同一个地址空间和所有可用数据的能力。有些应用需要多个并行实体合作完成工作,虽然多进程通过IPC也可以完成,但是没有线程方便。

(2)线程比进程更轻量级,创建和撤销线程的代价比进程小,速度快。

(3)如果存在大量的计算和I/O处理,拥有多线程允许这些活动彼此重叠进行,可加快程序执行速度,充分利用CPU资源。

一个线程拥有程序计数器、寄存器、堆栈、状态这些内容。同样的,线程也有4种状态:运行、阻塞、就绪或终止。

因为多个线程拥有同样的地址空间,因此相互之间如果操作有误影响比较大,这就增加了编写多线程程序的难度,这是个双刃剑,看在如何使用了。

内核级线程与用户级线程,转载于http://blog.csdn.net/liuqiyao_01/article/details/38975975

KST:

内核支持线程是在核心空间实现的;内核为每个线程在核心空间中设置了一个线程控制块,用来登记该线程的线程标识符、寄存器值、状态、优先级等信息;所有对线程的操作,如创建、撤消和切换等,都是通过系统功能调用由内核中的相应处理程序完成;设置了内核支持线程的系统,其调度是以线程为单位进行的。

优点:
在多处理器系统中,内核能够同时调度同一进程中多个线程并行执行到多个处理器中;如果进程中的一个线程被阻塞,内核可以调度同一个进程中的另一个线程;内核支持线程具有很小的数据结构和堆栈,线程的切换比较快,切换开销小;内核本身也可以使用多线程的方式来实现。
缺点:
即使CPU在同一个进程的多个线程之间切换,也需要陷入内核,因此其速度和效率不如用户级线程。

ULT:

用户级线程仅存在于用户空间中,与内核无关;就内核而言,它只是管理常规的进程—单线程进程,而感知不到用户级线程的存在;每个线程控制块都设置在用户空间中,所有对线程的操作也在用户空间中由线程库中的函数完成,无需内核的帮助;设置了用户级线程的系统,其调度仍是以进程为单位进行的。
优点:
线程的切换无需陷入内核,故切换开销小,速度非常快;线程库对用户线程的调度算法与OS的调度算法无关,因此,线程库可提供多种调度算法供应用程序选择使用;用户级线程的实现与操作系统平台无关。
缺点:
系统调用的阻塞问题:对应用程序来讲,一个线程的阻塞将导致整个进程中所有线程的阻塞;多线程应用无法享用多处理机系统中多个处理器带来的好处。

组合方式:

内核支持多KST线程的建立、调度和管理,同时,也允许用户应用程序建立、调度和管理用户级线程;一些内核支持线程对应多个用户级线程,程序员可按应用需要和机器配置对内核支持线程数目进行调整,以达到较好的效果。
优点:
同一个进程内的多个线程可以同时在多处理器上并行执行;在阻塞一个线程时,并不需要将整个进程阻塞


两者比较:

(1)内核支持
用户级线程可在一个不支持线程的OS中实现;
内核支持线程则需要得到OS内核的支持。
(2)处理器分配
在多处理机环境下,对用户级线程而言主,内核一次只为一个进程分配一个处理器,进程无法享用多处理机带来的好处;
在设置有内核支持线程时,内核可调度一个应用中的多个线程同时在多个处理器上并行运行,提高程序的执行速度和效率。

(3)调度和线程执行时间
设置有内核支持线程的系统,其调度方式和算法与进程的调度十分相似,只不过调度单位是线程;
对只设置了用户级线程的系统,调度的单位仍为进程。
因此,在条件相同的情况下,内核支持的线程通常比用户级线程得到更多的CPU执行时间。
(4)切换速度
用户级线程的切换,通常发生在一个应用程序的诸线程之间,而不需要陷入内核,而且切换的规则也很简单,切换速度比内核支持线程至少快一个数量级。

(5)系统调用
在典型OS中,许多系统调用都会引起阻塞。当一个用户级线程执行这些系统调用时,被阻塞的将是整个进程。



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值