2.6 线程

进程分为两个组成部分
  • 调度的基本单位
  • 资源的独立单元

线程作为基本调度单位独立出来,由OS调度

多线程

单个进程内支持多个并发路径的能力

单线程

一个进程只有一个线程

线程是进程中的一个实体,是独立调度和分派的单元

2.6.1 进程vs线程

一个进程可以有一个或多个线程
挂起或终止一个进程=挂起或终止其内部所有线程

线程
  • 执行状态state:派生、阻塞、解除阻塞、结束
  • 上下文context
  • 局部变量
  • 共享的资源和内存

多线程比单线程多一个tcb(线程的“pcb”)

线程优点
  1. 创建耗时短
  2. 终止耗时短
  3. 切换耗时短(同进程内)
  4. 提高了不同执行程序间的通信效率
线程同步
  • 一个进程中的所有线程共享该进程数据和空间
  • 一个线程对数据修改会影响其他线程

2.6.2线程分类

用户级线程 ULT(User-Level Thread)
  • 线程内核不可见,由应用程序管理
  • 进程阻塞,线程不一定阻塞;进程运行,线程也可能阻塞
  • 优点
  • 线程切换不需要切换内核模式
  • 调度策略可以应用程序定制
  • 可运行在任何种类的OS上
  • 缺点
  • 线程系统调用时会阻塞该进程所有线程
  • 不适用于多核系统
  • 缺点的改进办法
  • jacketing技术:由应用级调用替代系统调用
内核级线程 KLT(Kernel level Thread)
  • 内核管理线程,应用程序不管理线程
  • 优点
  • 可以将多个线程分配到多个cpu上
  • 一个线程阻塞时,同进程其他线程不会阻塞
  • 内核本身也可以使用多线程
  • 缺点
  • 线程切换要进行模式切换

混合方法(ULT+KLT)
  • 线程在用户级创建
  • 线程调度、同步由应用程序完成
  • 用户线程一个或多个映射到内核线程上(内核线程要更少)

线程、线程与进程、ULT与KLT相关推荐

  1. 用户进程与内核进程是一一对应的吗_用户线程、内核线程和轻量级进程

    这一篇再继续就线程进行一些更深层次的研究 线程所需的资源 进程中各个线程共享代码.数据和文件等资源,记录线程运行状态的空间(TCB)每个线程单独有一个 每个进程都需要它自己私有的线程控制块(TCB) ...

  2. PHP 会话 线程 进程,接上节我们来了解了解多进程的一些基础进程 / 线程 / 多进程 / 父进程 / 子进程 / 会话 / 控制终端等...

    多进程的一些基础 定义 进程/父进程/子进程 进程是资源调度和分配的一个独立单元 进程是由线程组成 即等于 一个进程 = 一个线程. 进程是由另一个进程创建 (系统进程 init进程除外) 所以会出现 ...

  3. 【Linux 内核】进程管理 ( 内核线程概念 | 内核线程、普通进程、用户线程 | 内核线程与普通进程区别 | 内核线程主要用途 | 内核线程创建函数 kernel_thread 源码 )

    文章目录 一.内核线程概念 二.内核线程.普通进程.用户线程 三.内核线程.普通进程区别 四.内核线程主要用途 五.内核线程创建函数 kernel_thread 源码 一.内核线程概念 直接 由 Li ...

  4. 线程的创建 验证线程之间共享数据 守护线程 线程进程效率对比 锁 死锁 递归锁...

    线程(from threading import Thread):CPU调度的最小单位 线程的两种创建方式:方式一: 1 from threading import Thread 2 def f1(i ...

  5. 【Linux 线程】同一个进程中的线程共享哪些资源

    进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线 ...

  6. linux 内核线程与普通进程的区别

    linux 内核通过内核线程这种方式来实现在后台运行一些操作. 内核线程是在内核空间中单独存在的标准进程.内核线程与普通进程最大的不同在于: 内核线程没有地址空间.内核线程只能工作于内核空间,不能上下 ...

  7. python守护进程进程池_Python3标准库:multiprocessing像线程一样管理进程

    Python Python开发 Python语言 Python3标准库:multiprocessing像线程一样管理进程 1. multiprocessing像线程一样管理进程 multiproces ...

  8. 什么是线程?与进程又有什么区别,为什么要使用它,等对线程进行详细介绍

    一.什么是线程 在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程 进程: 划分空间,加载资源,静态的,资源单位 线程: 执行代码,执行能力,动态的,执行单位 进程只是用来把资源集中到 ...

  9. 如何查询一个进程下面的线程数(进程和线程区别)

    在平时工作中,经常会听到应用程序的进程和线程的概念,那么它们两个之间究竟有什么关系或不同呢? 一.对比进程和线程 1)两者概念 -  进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程 ...

最新文章

  1. ssl双向认证和单向认证的区别
  2. [攻防世界 pwn]——welpwn
  3. recorder-list
  4. 谈谈关于MVP模式中V-P交互问题
  5. 使用Google Cloud Storage托管您的Maven工件
  6. mysql 重置自增长_怎么重置mysql的自增列AUTO_INCREMENT初时值
  7. 关于哈希表,你该了解这些!
  8. 电子元件知识汇总1-封装
  9. 腾讯会议瞩目会议开启共享屏幕时候出现卡顿时候,是显卡问题。
  10. 微信小程序实现定位(小白专用)
  11. 人寿保险的十大真相 保险不是什么时候都能买的
  12. 读取csv(excel类相关文件)常见bug,及解决办法统计
  13. Combating the Repatriation Blues
  14. 通过GCN来实现对Cora数据集节点的分类
  15. code force 449 div2 C. Nephren gives a riddle
  16. [Unity3D] Unity3D连接安卓设备调试unity程序
  17. 学习记录646@python求解有效年利率
  18. 完成端口 完成端口 完成端口 还是完成端口
  19. jni in linux
  20. linux中read函数的用法,Linux中read命令的简介及使用方法

热门文章

  1. 销售软件服务器设置,销售软件服务器
  2. jQuery--思维导图
  3. SNMP简单网络管理协议
  4. 算法设计与分析 上机题Mergesort
  5. 使用LogParser分析IIS网站日志
  6. [转]关于flash中图片(jpg\png\gif)旋转后锯齿(模糊)问题
  7. python文件合法模式组合_以下选项中,不是Python文件二进制打开模式的合法组合是...
  8. vscode vim快捷键失效_VIM真的好用吗?到底要不要学习VIM?
  9. 初识CPS方法的连续动态建模
  10. MySQL用户管理和访问权限