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

线程

1. 什么是线程?

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

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

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

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

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

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

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

2. 并行编程

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

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

2.1 共享内存模型

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

2.2 线程安全

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

3. 空间布局

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

线程空间地址

http://www.sczhlp.com/news/435.html

相关文章:

  • 进程API函数
  • 进程
  • 〆250729〆Windows 系统中 C:\ProgramData 目录说明
  • .NET 10 中的新增功能系列文章1——运行时中的新增功能
  • CF2018D 题解
  • 区分引用变量和内表变量
  • Apple MagicKeyboard
  • 剑指offer-16、合并两个有序链表
  • 门店
  • 自定义控件----流动线条
  • 7.28总结
  • 2023年八大最佳Codecademy替代平台
  • 扩散模型-一张图片是一个概率分布采样的结果-94 - jack
  • 移远EC800K, EG800AK的 openSDK 编译
  • V-Ray 7 安装图解教程 | 支持3ds Max 2021-2026 含语言补丁配置
  • 2025暑假作业(7.28~8.3)
  • sed基础
  • 如果你还有一些困惑 / 请贴着我的心倾听 - Urd
  • 【IEEE出版】第五届计算机应用、视觉与算法国际学术会议(CVAA 2025)
  • 【SPIE出版】第二届生物医药和智能技术国际学术会议(ICBIT 2025)
  • 职业学院游戏发布
  • 一款可视化无代码的爬虫软件–EasySpider
  • 新手小白如何通过云服务器用Docker免费搭建web应用
  • 网站漏洞扫描工具-Acunetix
  • 生成深度图的图像模型–ZoeDepth
  • 如何复刻github的项目和共享自己的项目
  • 强大的论文解读工具-SciSpace Copilot
  • 可控图像工具--DrawGAN
  • 分享我经常使用的神器小工具
  • easyspider使用教程