03 线程基本介绍

目录

一.  线程的概念和特点

1.  线程的概念

 2.  线程的特点

 3.   引入线程后所带来的变化

 二.    线程的实现方式、多线程模型

1.  线程的实现方式

2.   多线程模型 


一.  线程的概念和特点

        前面我们介绍了进程,并说到进程是程序的一次执行,是调度的基本单位。那么大家来想一下这么一个场景,我打开了QQ.exe,QQ进程便会运行,在这次运行里我想跟同学视频聊天、共享文件、文字聊天,那么这三个功能对应的程序便会运行即QQ进程下会多出三个子进程,那么这个三个子进程都会被分配一定的资源,如果其中两个进程所需要的资源是重复的,一个进程要访问另一进程的资源就需要进程切换,这个时候就要进行一系列的操作,十分耗费时间以及资源,该如何解决这个问题呢?我们引入了线程的概念
 

1.  线程的概念

        线程(threads)是一个比进程更小的单位,他的引入是为了减少程序在并发执行时所付出的时空开销,使 OS 具有更好的并发性。在引入线程这个概念后,资源分配仍是以进程为单位的而进程调度则是以线程为基本单位的。  

 2.  线程的特点


        (1)引入线程后,进程是资源分配的基本单位,线程是调度的基本单位,线程几乎不拥有资源,只拥有极少量的资源。线程也有运行态、就绪态、阻塞态.

          (2)   同一进程下的各个线程间共享内存地址空间,可以直接通过读/写内存空间.

 3.   引入线程后所带来的变化


        (1) 调度:在传统的操作系统中,作为拥有资源的基本单位和独立调度、分派的基本单位都是进程。而在引入线程的操作系统中,则把线程作为调度和分派的基本单位,从而可显著地提高系统的并发程度。在同一进程中,线程的切换不会引起进程的切换,但从一个进程中的线程切换到另一个进程中的线程时,将会引起进程的切换。

        (2) 并发性:在引入线程的操作系统中,不仅进程之间可以并发执行,而且在一个进程中的多个线程之间亦可并发执行.

        (3) 拥有资源: 不论是传统的操作系统,还是引入了线程的操作系统,进程都可以拥有资源,是系统中拥有资源的一个基本单位。一般而言,线程自己不拥有系统资源(也有一点必不可少的资源),但它可以访问其隶属进程的资源,即一个进程的代码段、数据段及所拥有的系统资源,如已打开的文件、I/O 设备等,可以供该进程中的所有线程所共享。
 
        (4) 系统开销: 在进程切换时,涉及到当前进程 CPU 环境的保存及新被调度运行进程的 CPU 环境的设置,而线程的切换则仅需保存和设置少量寄存器内容,不涉及存储器管理方面的操作,所以就切换代价而言,进程也是远高于线程的。此外,由于一个进程中的多个线程具有相同的地址空间,在同步和通信的实现方面线程也比进程容易。

 二.    线程的实现方式、多线程模型

1.  线程的实现方式


          线程已在许多系统中实现,但各系统的实现方式并不完全相同。在有的系统中,特别是一些数据库管理系统,所实现的是用户级线程 ;而另一些系统 所实现的是内核级线程 ; 还有一些系统如 Solaris 操作系统,则同时实现了这两种类型的线程。
          用户级线程:在早期的操作系统中只支持进程还不支持线程,线程这一功能的实现是采取代码书写的线程库来实现的
          在这时,“线程”其实就是一行行代码,线程库的实现就类似于代码的调用,因此此时的用户级线程就运行在用户态中

        下面这个代码中while语句的作用实际就相当于线程库。


int main(){
  int num;
  while(true){
    if(num==1){线程1;}
    if(num==2){线程2;}
    if(num==3){线程3;}
  }
}

         根据上面这种图我们可以看出,用户级线程的管理工作(创建,切换,撤销等)均有应用程序来完成,不需要操作系统的介入。从用户的角度来看,确实可以感受到多个线程的存在(因为有直观的代码逻辑),但是在操作系统看来,操作系统并意识不到有多个用户级线程的存在。所以, “用户级线程”就是“从用户视角看能看到的线程”。
          这种用户级线程的 优点十分明显:进程切换较快,线程管理的系统开销较小,效率高。但是如果某一线程被阻塞了,那么整个进程都会停滞不前,而且因为用户级线程是用代码书写的所以这些代码不能在多核处理机上并发,只能在一个处理及上执行,这也是用户级线程的一个 缺点。


          内核级线程:无论是用户进程中的线程,还是系统进程中的线程,他们的创建、撤消和切换等也是依靠内核,在内核空间实现的


          相较于用户级线程,从下图中我们可以看到:

                内核级线程的管理工作(创建,切换,撤销等)均有操作系统内核来完成,所以内核级线程的切换必须进入核心态才能完成。每个内核级线程都会有一个TCB(Thread Control Block,线程控制块),通过TCB操作系统可以对内核级线程进行管理,所以, “内核级线程”就是“从操作系统内核视角看能看到的线程”。 与用户级线程的优缺点正好相反,内核级线程的 缺点是进程切换较慢,线程管理的系统开销较大。同时如果某一线程被阻塞了,别的线程可以继续并发执行,同时不同的线程还可以进入不同的处理机运行,这是他的 优点。

2.   多线程模型 

        一对一模型:该模型是为每一个用户线程都设置一个内核控制线程与之连接,当一个线程阻塞时,允许调度另一个线程运行。在多处理机系统中,则有多个线程并行执行。该模型并行能力较强,但每创建一个用户线程相应地就需要创建一个内核线程,开销较大,因此需要限制整个系统的线程数。

        多对一模型:多个用户级线程映射到一个内核级线程。且一个进程只被分配一个内核级线程。

  该模型的主要优点是线程管理的开销小,效率高;但当一个线程在访问内核时发生阻塞,则整个进程都会被阻塞,而且在多处理机系统中,一个进程的多个线程无法实现并行。

 
          这里我们需要知道:操作系统只“看得见”内核级线程,因此只有内核级线程才是处理机分配的单位

          多对多模型:用户级线程映射到 m 个内核级线程(n >= m)。每个用户进程对应 m 个内核级线程。


          对于这个多对多模型,一个线程阻塞并不会引起整个进程阻塞,只有这两个线程同时阻塞才会将进程阻塞,因此多对多线程模型的并发性较好。因为 内核级线程才是处理机分配的基本单位,所以这个多对多模型最多被分配两个处理机。

如有雷同,纯属总结。 


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值