【Linux】线程概述

引言:

  • 线程:一个程序中的多条执行路线就叫做线程(thread);
    • 线程是一个进程内部的一个控制序列;
    • 每个进程至少都一个线程,一个进程可以有多个线程

参考文章:https://zhuanlan.zhihu.com/p/111553897


(一)进程和线程的区别

  • 进程是资源分配的最小单位,线程是CPU调度的最小单位
  • 进程有独立的地址空间,线程共享进程中的地址空间
  • 创建进程资源消耗大,创建线程资源消耗小
  • 进程的切换开销大,线程的切换开销相对较小

(二)线程的优缺点

(1)优点
  • 高效的多任务工作
  • 处理服务器的多客户端的连接
  • 线程切换代价小
(2) 缺点
  • 多线程的程序中,变量共享易引发错误
  • 调试难度增加,因为调试过程中线程间交互难以控制
  • 单核机器上运行多线程不一定快。

(三)线程的实现方式

(1)内核级线程

内核线程(kernel-level threads)指需要内核的参与,由内核完成线程的调度。其依赖于操作系统核心,由内核的内部需求进行创建和撤销。内核线程的线程表(thread table)位于内核中,包括了线程控制块(TCB),一旦线程阻塞,内核会从当前或者其他进程(process)中重新选择一个线程保证程序的执行;
在这里插入图片描述

优点:

  • 实现了真正意义的线程并行
  • 不需要运行时系统参与

缺点:

  • 频繁模式切换导致内核开支
(2)用户级线程

用户级线程不需要内核支持而在用户程序中实现的线程,其不依赖于操作系统核心,应用进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程。
在这里插入图片描述

优点:
1.线程位于用户空间(即不需要模式切换)。
2.完全控制线程调度器(例如:网站服务器)。
3.独立于操作系统(线程可以在不支持它们的操作系统上运行)。
4.运行时系统(run time system)可以切换用户空间中的本地阻塞线程(例如:等待另一个线程完成).

缺点:
1.系统调度中,对一个线程的阻塞将会导致整个进程阻塞;(例如:当一个线程因 I/O 而处于等待状态时,整个进程就会被调度程序切换为等待状态,其他线程得不到运行的机会)
2.网站服务器中,一个页面的错误将导致整个进程阻塞。
3.非真正意义的线程并行(一个进程安排在单个CPU上)。
4.不存在时钟中断(例如,如果用户线程是非抢占式(non-preemptive)的,将无法被“进程调度”(schedulers)以round-robin的调度算法调用,因为round-robin调度算法中限制了cpu时间片)。

(3)组合级线程

在一些系统中,使用组合方式的多线程实现, 线程创建完全在用户空间中完成,线程的调度和同步也在应用程序中进行. 一个应用程序中的多个用户级线程被映射到一些(小于或等于用户级线程的数目)内核级线程上。
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值