线程(Thread )的介绍

一 为什么使用线程?

        如使用视频播放软件播放视频需要从视频文件中读取数据,对读取数据进行解压,然后把解压的数据播放出来,为了让画面和音频流畅的协调同步的,上面三个操作是多线程进行的,但是

多进程也存在问题,就是:问题1 进程之间如何通信和共享数据 ,问题2 维护进程的系统开销大,如创建进程时,分配资源,建立PCB。终止进程时,回收资源,撤销PCB

。进程切换时,保存当前进程的状态信息。

为了克服以上弊端:采用线程:线程之间可以并发运行并且共享相同的地址空间

二 什么是线程

        早期计算机系统以进程作为独立的运行基本单位,后来发展出来用更小的独立运行的基本单位叫:线程

线程是属于进程中的一条执行流程,一个进程可以有很多个线程,这些线程可以共享代码段,数据段,打开文件等资源,但是各个线程之间有一套独立的寄存器和栈,用来保证线程的控制流是相对独立的。

线程缺点当进程中的一个线程崩溃时,进程中的其他所有线程也会崩溃。

线程优点:一个进程可同时存在多个线程,各个线程之间可以并发执行,各个线程之间可以共享地址空间和文件等资源。

三 线程与进程的比较

1 进程是资源(包括内存,打开的文件)分配的单位,线程是CPU调度的单位。(线程和进程的最大区别):所以所谓的操作系统的任务调度,实际上的调度对象就是线程,进程只是给线程提供了虚拟内存、全局变量等资源。

2 进程拥有一个完整的资源平台,而线程只是独享必不可少的资源(如寄存器和栈,这些是线程的私有数据)

3 线程同样具有就绪,阻塞,执行三种状态,可以状态之间的转换

4 线程能减少并发执行的时间和空间开销

为何线程能比进程减少开销?因为 1 线程创建的时间消耗比进程的少,原因在于进程需要资源管理信息(如内存管理信息,文件管理信息,),线程创建过程中不涉及到资源管理信息,而只是共享它们。2 线程终止时间比进程快,因为线程释放的资源比进程的少很多。

3 同一个进程内的这些线程切换速度比进程切换快,因为线程有相同的地址空间(虚拟内存),说明同一个进程中的所有线程都具有同一个页表,线程之间切换时,不需要更换页表,而进程之间的切换需要更换页表,页表更换的过程开销比较大。

5 当进程中只有一个线程时,可以认为进程就相当于线程

6 当进程拥有多个线程时,这些线程共享虚拟内存、全局变量这些资源,当同一进程中的线程之间上下文切换时,不需要修改这些资源。

四 线程的上下文切换

属于不同进程的线程由于不是属于同一个进程,所以线程切换过程就和进程上下文切换一样了。

同一个进程的不同线程之间切换,因为这里共享虚拟内存这些资源,所以切换时,只用切换线程的私有数据、寄存器等不能共享的数据,能共享的数据不用切换。

五 线程的实现

        线程有三种实现方式:

                1 用户线程(User Thread):用户空间实现的线程,不是由内核管理的线程,是由用户态的线程库来管理的。

                2 内核线程(Kernel Thread):在内核中实现的线程,是由内核管理的线程

                3 轻量级进程(LightWeght Process):在内核中支持用户线程;

用户线程与内核线程的对应关系:

多对一:多个用户线程对应同一个内核线程

一对一:一个用户线程对应一个内核线程

多对多:多个用户线程对应多个内核线程

用户线程如何理解?有何优缺点?

用户线程:由用户级线程库函数来完成用户线程的管理。管理包括:创建,终止,同步,和调度。是基于用户态的线程管理来实现,那么线程控制块TCB也是在库里面实现的,对于操作系统而言是看不到这个TCB的,它只能看到整个进程的PCB。线程控制块,线程表在用户空间中,进程控制块,进程表在内核空间

 用户线程的优点:1 可用于不支持线程技术的操作系统,因为在进程中有其私有的线程控制块(TCB)列表,用来记录各个线程的信息(如线程的寄存器,栈指针,PC)。

2 线程切换由用户级线程库函数完成,不需要用户态与内核态的切换,速度很快。

用户线程的缺点:1由于操作系统不参与线程调度,一个线程发起系统调用而阻塞,就会导致这个进程中的其他用户线程都无法执行.2 当一个进程开始运行时,除非它主动交出CPU的使用权,不然进程中的其他用户线程无法运行,因为用户态的线程没法打断当前运行中的线程,它没有这个特权,只要操作系统才有,但是用户线程不是由操作系统管理的。

那内核线程如何理解?存在什么优势和缺陷?

内核线程是由操作系统管理,线程对应的TCB自然是放在操作系统里的,这样线程的创建、终止和管理都是由操作系统负责。线程控制块,线程表 在内核空间中。进程控制块,线程表在内核空间

内核线程的优点:

      1  在一个进程当中,如果某个内核线程发起系统调用而被阻塞,并不会影响其他内核线程的运行.2 分配给线程,多线程的进程获得更多的CPU运行时间。

内核线程的缺点:

         1.在支持内核线程的操作系统中,由内核来维护进程和线程的上下文信息,如PCB和TCB

2线程的创建、终止和切换都是通过系统调用的方式来进行的,因此对于系统来说,系统开销比较大。

如何理解轻量级进程?

轻量级进程(LWP)是内核支持用户线程,一个进程可以有一个或多个轻量级进程,轻量级进程都是由一个内核线程支持的,每个轻量级进程和内核线程是一对一映射的。LWP只能由内核管理并像普通进程一样被调度。Linux内核是支持LWP的典型例子。Lwp与普通线程的区别在于它只是一个最小的执行上下文和调度程序所需的统计信息。一个进程代表程序的一个实例,而轻量级进程代表程序的执行线程,因为一个执行线程不像进程那样需要那么多状态信息,所以LWP也不带有这样子的信息。在LWP上也是可以使用用户线程,LWP与用户线程的对应关系有三种

1:1模式: 一个LWP对应一个用户线程,再对应到一个内核线程:优点:实现并行,当一个LWP阻塞,不会影响其他LWP,缺点:每个用户线程,就产生一个内核线程,创建线程的开销比较大。N:1,一个LWP对应多个用户线程,再对应一个内核线程,优点:用户线程要开几个都没问题,且上下文发生用户空间,切换效率高。缺点:一个用户线程如果阻塞了,则整个线程都将会阻塞,另外在多核CPU中,是没有办法充分利用CPU的。M:N多个LWP对应多个用户线程,根据前面的的两个模型混搭在一起形成M: N模型,该模型提供了两级控制,多个用户线程对应到多个LWP,优点:综合了前面两种模式的优点,大部分的线程上下文发生在用户空间,且多个线程又可以充分利用多核CPU的资源。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值