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

141 Linux 系统编程18,线程,ps –Lf 进程 查看LWP,线程间共享数据,优缺点,编译加-lpthread,

一 线程概念

什么是线程

LWP:light weight process 轻量级的进程,本质仍是进程(在Linux环境下)

进程:独立地址空间,拥有PCB 

线程:有独立的PCB,但没有独立的地址空间(共享)

区别:在于是否共享地址空间。 独居(进程);合租(线程)。

Linux下: 线程:最小的执行单位

  进程:最小分配资源单位,可看成是只有一个线程的进程

二 Linux内核线程实现原理

类Unix系统中,早期是没有“线程”概念的,80年代才引入,借助进程机制实现出了线程的概念。因此在这类系统中,进程和线程关系密切。

1. 轻量级进程(light-weight process),也有PCB,创建线程使用的底层函数和进程一样,都是clone

2. 从内核里看进程和线程是一样的,都有各自不同的PCB,但是PCB中指向内存资源的三级页表是相同的

3. 进程可以蜕变成线程

4. 线程可看做寄存器和栈的集合

5. 在linux下,线程最是小的执行单位;进程是最小的分配资源单位

察看LWP号:ps –Lf pid 查看指定线程的lwp号。

三,各个线程之间共享和非共享的

线程共享资源

1.文件描述符表

2.每种信号的处理方式

3.当前工作目录

4.用户ID和组ID

5.内存地址空间 (.text/.data/.bss/heap/共享库)

线程非共享资源

1.线程id

2.处理器现场和栈指针(内核栈)

3.独立的栈空间(用户空间栈)

4.errno变量

5.信号屏蔽字

6.调度优先级

线程优、缺点

优点: 1. 提高程序并发性 2. 开销小 3. 数据通信、共享数据方便

缺点: 1. 库函数,不稳定 2. 调试、编写困难、gdb不支持 3. 对信号支持不好

优点相对突出,缺点均不是硬伤。Linux下由于实现方法导致进程、线程差别不是很大。

四,编译含有线程文件时 需要链接线程库 -lpthread 

实际上 加上 -lpthread  和 -pthread  是一样的。

g++ main.cpp -o main -g -Wall -pthread

五,线程的lwp号 和线程id不是同一个概念

LWP 是线程号,表示线程在CPU中的身份,交给CPU,CPU用这个划分时间轮片。


pthread_self函数是获取线程ID,在进程中表示线程身份的。

相关文章:

  • docker学习入门篇
  • 【java数据结构】HashMap和HashSet
  • 详解开关电源
  • 理论学习:nn.CrossEntropyLoss
  • linux中git暂存,提交,上传到github
  • 深入学习默认成员函数——c++指南
  • 学习数据节构和算法的第15天
  • 什么是jwt
  • 【Spring Boot 3】动态注入和移除Bean
  • git - 笔记
  • 在 Python 中从键盘读取用户输入
  • Promise图解,Pass
  • 【Web】浅聊Java反序列化之C3P0——JNDI注入利用
  • 【Qt】四种绘图设备详细使用
  • 飞塔防火墙开局百篇——002.FortiGate上网配置——透明模式配置(Transparent)
  • Android开源项目规范总结
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • download使用浅析
  • ES学习笔记(12)--Symbol
  • Javascript设计模式学习之Observer(观察者)模式
  • js面向对象
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • 反思总结然后整装待发
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 前嗅ForeSpider教程:创建模板
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 使用agvtool更改app version/build
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 微信小程序开发问题汇总
  • 在weex里面使用chart图表
  • 智能合约Solidity教程-事件和日志(一)
  • Android开发者必备:推荐一款助力开发的开源APP
  • Hibernate主键生成策略及选择
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • ​比特币大跌的 2 个原因
  • #{}和${}的区别是什么 -- java面试
  • #define与typedef区别
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (八)Spring源码解析:Spring MVC
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (六)vue-router+UI组件库
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (转) RFS+AutoItLibrary测试web对话框
  • (转载)Linux 多线程条件变量同步
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .net wcf memory gates checking failed
  • .NET 分布式技术比较
  • .Net程序帮助文档制作
  • .Net组件程序设计之线程、并发管理(一)
  • /proc/stat文件详解(翻译)