| |
|
开发:
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——线程 |
学习视频链接? 目录 一、线程概念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、循环创建多个子线程 ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |