当前位置: 首页 > news >正文

谈谈对线程的认识

面对这样的一个多核CPU时代, 实现并发编程是刚需. 多进程实现并发编程, 效果是特别理想的.

但是, 多线程编程模型有一个明显的缺点, 就是进程太重了, 效率不高.

创建一个进程, 消耗时间比较多.

销毁一个进程, 消耗时间也比较多.

调度一个进程, 消耗时间也比较多.

这里的时间主要是消耗在申请资源上的. 进程是系统分配资源的基本单位. 这其中, 内存分配就是一个大活, 操作系统内部有一定的数据结构把空闲的内存分块管理好. 当我们去进行申请内存的时候, 系统就会从这样的数据结构中找到一个大小合适的空闲内存, 返回给对应的进程.

虽然通过这里的数据结构可以一定程度上地提高效率, 但是整体来说, 管理的空间比较多, 相比之下还是一个耗时操作.

为了解决上述问题, 就引入了"线程" (Thread)

线程也叫做"轻量级进程"
创建线程,比创建进程,更快;

销毁线程,比销毁进程,更快;

调度线程,比调度进程,更快......

线程不能独立存在,而是要依附于进程.(进程包含线程)进程可以包含一个线程,也可以包含多个线程.

一个进程, 最开始的时候, 至少要有一个线程. 这个线程负责完成执行代码的工作. 也可以根据需要,创建出更多的线程, 从而使当前实现"并发编程"的效果. 每个线程都可以独立地执行一段代码.

前面谈到进程调度,前面的讨论都是基于“一个进程里只有一个线程"的情况.
实际上,一个进程中,是可以有多个线程的. 每个线程,都是可以独立的进行调度的.
每一个线程, 也有状态, 优先级, 上下文,记账信息....

一个进程可能使用一个PCB表示,也可能使用多个PCB表示.

每个PCB对应到一个线程上. 每个线程都有自己的状态,优先级,上下文,记账信息.….. 用来辅助调度.

除此之外,前面谈到的pid,是相同的. 内存指针,文件描述符表,也是共用同一份的.


所以这也是为什么 进程是资源分配的基本单位. 线程是调度执行的基本单位.

相关文章:

  • 23.2 HtmlDocument类
  • 算法1-4 数楼梯
  • 007 HBuilderX提示IDE service port disabled. To use CLI Call, open IDE
  • 程序代码篇---Python参数管理
  • Spring统一功能处理:拦截器、响应与异常的统一管理
  • PT8023W 单触控双输出 LED 调光 IC
  • 交友项目-交友软件简介
  • 将maya模型物体材质转化为面材质
  • SHELL32!Shell_MergeMenus函数分析
  • Plant Simulation培训教程-双深堆垛机立库仿真模块
  • AI赋能编程:PyCharm与DeepSeek的智能开发革命
  • 如何将Python函数打包成.so库?
  • 制定产品宽高比相关标准的考量维度
  • Openai Dashboard可视化微调大语言模型
  • 代码随想录算法【Day52】
  • SWAT| 水文 | SWAT模型(四):气象数据库制备(附Python代码)
  • 【Pandas】pandas Series sample
  • LeeCode题库第二十八题
  • 使用Open WebUI下载的模型文件(Model)默认存放在哪里?
  • Python strip() 方法详解:用途、应用场景及示例解析(中英双语)
  • 河北省纪委原副书记、省监委原副主任陈玉祥一审获刑十二年
  • 春决火爆的背后,PEL如何做大这块电竞蛋糕
  • 黄仁勋:美国芯片管制完全错误,阻碍别人发展只会激励他们更努力
  • 海口警方通报“司机驾车拖行虐猫”:系意外,未发现故意虐猫行为
  • 外汇局:4月下旬外资投资境内股票转为净买入
  • 新冠阳性率升高,专家:新冠变异株致病力没太多变化