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

线程

1. 什么是线程?

从技术上讲,线程被定义为一个独立的指令集,可以由操作系统调度运行。

对于开发人员来说,独立于主程序运行的”过程“的概念可能是对线程的最好的描述。

在理解线程之前,首先需要理解UNIX进程。

一个进程是由操作系统创建,并且需要相当数量的”开销“。进程包含有关程序资源和程序执行状态的信息,包括:

  • 进程ID
  • 环境变量
  • 工作目录
  • 程序指令
  • CPU状态
  • 堆栈
  • 文件描述符
  • 信号动作
  • 共享库
  • 进程间通信相关信息

线程使用并存在于这些进程资源中,但为了能够由操作系统调度并作为独立实体运行,线程只拥有使它能够作为可执行代码存在的基本资源,例如:

  • 堆栈指针
  • 寄存器
  • 调度属性
  • 挂起和阻塞信号集
  • 线程特定数据

2. 并行编程

线程非常适合并行编程,设计并行程序有很多的注意事项。例如:

  • 并行编程模型
  • 通信
  • 数据依赖关系
  • 同步和竞争条件
  • 内存问题
  • I/O 问题

2.1 共享内存模型

所有线程都可以访问相同的全局共享内存,但线程也有自己的私有数据。需要同步和保护对全局数据的访问。

2.2 线程安全

简而言之,线程安全是指应用程序同时执行多个线程的能力,而不会“破坏”共享数据或创建竞争条件。

3. 空间布局

线程之间共享一份全局内存区域,包括初始化数据段、未初始化数据段(bss)、堆内存段。Linux中通过pthread_create创建线程,glibc要为每个线程独立分配线程栈,线程栈位于mmap区(位于栈和堆的中间,从高地址向低地址延伸)。

线程空间地址

http://www.vanclimg.com/news/1304.html

相关文章:

  • 进程
  • 进程API函数
  • 〆250729〆Windows 系统中 C:\ProgramData 目录说明
  • .NET 10 中的新增功能系列文章1——运行时中的新增功能
  • cv2安装测试的一个案例-面部检测
  • gitlab重置管理员root密码
  • 线程API
  • 1000子读后感
  • Teamcenter: 度量单位
  • .NET 9 的免费午餐:GZip 性能提升38.3%
  • 暑假本校集训
  • 20250729-33
  • FHQ Treap 学习笔记
  • C#/.NET/.NET Core技术前沿周刊 | 第 48 期(2025年7.21-7.27)
  • Metasploit Pro 4.22.8-2025071801 (Linux, Windows) - 专业渗透测试框架
  • test的启动方法
  • Lombok @Builder失效问题排查与解决方案
  • 亚马逊Q Developer:用自然语言构建机器学习模型
  • day07
  • 读心与芯:我们与机器人的无限未来08计算思维
  • 前馈电容技术解析!
  • 7/29
  • js高级第一天
  • Git 小白极速入门笔记
  • Git课程讲义
  • sakuraFrp页面503
  • 企业级AI Agent(智能体)报告
  • 2025倒闭半导体公司大盘点
  • 大算力芯片,向左(定制)还是向右(通用)?
  • Z Waves|北大毕业的前OpenAI高管,如今创办估值120亿美金的AI新势力,翁荔想要重写AI安全的规则