IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Linux学习日记19——线程 -> 正文阅读

[系统运维]Linux学习日记19——线程

学习视频链接?

黑马程序员-Linux系统编程_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1KE411q7ee?p=151&spm_id_from=333.1007.top_right_bar_window_history.content.click

目录

一、线程概念

1.1 什么是线程

1.2 查看火狐浏览器的线程

1.3 Linux内核线程实现原理

1.4 线程共享资源

1.5?线程非共享资源

1.6 线程优、缺点

二、进程控制原语

2.1 pthread_self 函数

2.2 pthread_create 函数

2.3 测试代码


一、线程概念

1.1 什么是线程

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

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

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

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

Linux下:

线程:最小的执行单位

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

进程创建线程,每个线程都有 PCB,原来的进程变成线程了

1.2 查看火狐浏览器的线程

?进程 id 是同一个,进程号有多少,共有 22 个

1.3 Linux内核线程实现原理

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

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

2、从内核里看进程和线程是一样的,都有各自不同的 PCB,但是 PCB 中指向内存资源的三级页表(参考操作系统分页式存储)是相同的

3、进程可以蜕变成线程

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

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

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

1.4 线程共享资源

1、文件描述符表

2、每种信号的处理方式

3、当前工作目录

4、用户 ID 和组 ID

5、内存地址空间(.text/ .data/ .bss/heap/共享库)(不贡献栈)

1.5?线程非共享资源

1、线程 ID

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

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

4、errno 变量

5、信号屏蔽字

6、调度优先级

1.6 线程优、缺点

1、优点

提高程序并发性,开销小,数据通信、共享数据方便

2、缺点

库函数、不稳定,调试、编写困难、GDB不支持,对信号支持不好

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

二、进程控制原语

2.1 pthread_self 函数

1、作用

获取线程 ID。其作用对应进程中 getpid() 函数

2、pthread_t pthread self(void);

返回值:成功:0;失败:无

3、线程 ID

pthread_t 类型,本质:在Linux下为无符号整数 (%lu),其他系统中可能是结构体实现

线程 ID 是进程内部 识别标志。(两个进程间,线程 ID 允许相同)

4、注意

不应使用全局变量 pthread_t tid;? 在子线程中通过 pthread_create 传出参数来获取线程 ID,而使用 pthread_self

2.2 pthread_create 函数

1、作用

创建一个新线程? ? 其作用,对应进程中 fork() 函数

2、int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);

返回值:成功:0;? ?失败:错误号? —— Linux 环境下,所有线程特点,失败均直接返回错误号

参数:

参数1:传出参数,保存系统为我们分配好的线程 ID

参数2:通常传 NULL,表示使用线程默认属性。若想使用具体属性也可以修改该参数

参数3:函数指针,指向线程主函数(线程体),该函数运行结束,则线程结束

参数4:线程主函数执行期间所使用的参数

2.3 测试代码

1、查看父进程的线程 id

2、创建线程,主线程执行 main 函数,创建的线程执行 tfn

3、循环创建多个子线程

?

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-04-27 11:41:37  更:2022-04-27 11:42:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 21:06:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码