Linux 线程的概念与实现方式

一、线程的概念

线程是进程内部的一条执行序列或执行路径,一个进程可以包含多条线程。

在这里插入图片描述

一个进程中有两条或多条执行路径的时候,它们是可以同时执行的,也就是说,一个进程中的多个线程是可以同时执行的。当我们需要一个程序同时执行两个不同操作的时候就引入了多线程。如果是一个单线程,只有一条路径时,不可能同时执行两个不同操作,因为其中一个操作正在执行的时候,另一个操作是阻塞状态。

当一个进程有一个主线程和一个子线程的时候,主线程和子线程可以同时执行;也可以有多个相同的子线程,这样就是一个主线程和多个子线程同时执行,多个子线程做的事情是一样的;也可以有多个不同的子线程,这样就是一个主线程和多个不同的子线程同时执行,多个子线程做的事情不一样。

二、线程的实现方式

在操作系统中,线程的实现有以下三种方式:

1.用户级线程

在用户空间模拟出了多条执行路径,但在内核的眼里只有一条执行路径,这种线程的创建不需要操作系统参与并且可以创建很多,这种线程的缺点是无法进入多个处理器,因为内核无法感知到每一个线程的存在,所以无法把每一个不同的线程放到不同的处理器上让它执行。用户级线程的优点是在用户空间创建,开销比较小,可以创建很多,缺点是无法使用多个处理器。

2.内核级线程

利用内核提供的接口去创建线程,创建内核级线程是需要操作系统参与的,这种线程是由操作系统来直接管理,内核也可以感知到每一个线程的存在,所以内核级线程的创建离不开操作系统的支持,可以将其中一个线程分配到某一个处理器上将另一个线程分配到另一个处理器上,它就可以实现真正意义上的并行。内核级线程的优点是可以使用多个处理器,缺点是开销大。

3.组合级线程

会在内核中创建多条内核级线程,目的是为了能够使用多个处理器,也会在用户空间创建多个用户级线程。所以,组合级线程可以利用多处理器的资源,同时可以在用户空间创建多个用户级的线程,是我们后期创建线程的开销可以变小,因为当线程数目超出处理器数目的情况下,最后还是只能时间片轮转。

在这里插入图片描述

Linux 中线程的实现:
Linux 实现线程的机制非常独特。从内核的角度来说,它并没有线程这个概念。Linux把所有的线程都当做进程来实现。内核并没有准备特别的调度算法或是定义特别的数据结构来表征线程。相反,线程仅仅被视为一个与其他进程共享某些资源的进程。每个线程都拥有唯一隶属于自己的task_struct(PCB),所以在内核中,它看起来就像是一个普通的进程(只是线程和其他一些进程共享某些资源,如地址空间)。实际上,如果创建2个线程,它会消耗2个pid,对外呈现的是主进程的pid,就是主线程的pid作为整个进程的pid。

三、进程与线程的区别

1.进程:一个正在运行的程序

进程是资源分配的最小单位;
进程有自己的独立地址空间;
进程的创建消耗资源大;
进程的切换开销大。

2.线程:是进程内部的一条执行序列或执行路径

线程是CPU调度的最小单位;
线程共享进程中的地址空间;
线程的创建相对较小;
线程的切换开销相对较小。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值