| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> Linux多线程理解---(线程概念线程控制) -> 正文阅读 |
|
[系统运维]Linux多线程理解---(线程概念线程控制) |
目录 ??????? 线程概念在以前我们学习进程的时候,进程就是一个pcb,是一个task_struct结构体,里面有很多描述信息实现操作系统对程序运行的管理 在我们学习到线程后,发现线程是进程的一条执行流,在linux下,程序调度是通过pcb完成的,pcb是linux下的执行流,所以也可以认为linux下的pcb是一个线程,只不过linux下通常不谈线程,而叫做轻量级进程
所谓轻量化进程就是一个进程中可以存在多个pcb,这些pcb共用一个虚拟地址空间 每一个线程都是进程中的一个执行流,因此多个执行流可以共同工作,这些pcb合在一起就是线程组,也可以将进程理解为一个线程组. 线程之间的独有与共享共享 虚拟地址空间:数据段代码段 信号处理方式 IO信息 用户ID/组ID工作路径...... 独有
多线程与多进程的优缺点分析优点
?多进程 独立性高,稳定性强 多线程和多进程的优缺点是互补的. 共同优点:多任务使用多执行流处理的优点,都可以提高效率 CPU密集型程序:程序几乎都是cpu数据运算,执行流并不是越多越好,多了反而增加切换调度成本CPU密集型程序的执行流个数一般是cpu核心数+1,防止切换调度增加成本。 IO密集型程序:程序中几乎都是IO操作 IO操作:等待IO就绪,数据拷贝 线程控制在linux中系统没有直接提供线程的操作接口,不过在上层上封装实现了一套线程库. 线程控制通过线程创建->线程终止->线程等待->线程分离来控制 线程创建实现在用户态创建一个线程,但是linux下程序调度只能通过pcb完成,因此在内核创建了一个新的pcb出来.这时我们上层创建的线程叫做用户态线程,内核的pcb叫做轻量级进程 本质上就是通过在内核创建了一个轻量级进程来实现的 接口
参数:
?LWP是轻量级进程id,两者不同,他们有相同的PID,NLWP是轻量级进程数量,都是2; 线程终止线程终止就是退出线程
注意,主线程退出子线程并不退出 线程等待等待一个指定的线程退出,获取这个线程的退出返回值,释放资源.默认情况下,如果一个线程退出 ,如果不等待也会造成资源泄露 int?pthread_join(pthread_t?tid,void **retval) tid表示要等待哪个线程退出 retval:是一个void*空间的地址,用于接收线程返回值 void *(*thr_entry)(void *arg) 注意:默认情况下线程退出,为了保存自己的退出返回值,因此线程占用的资源在退出后也不完全被释放,需要被等待 线程等待也不仅仅是因为为了释放资源,避免资源泄露而等待 还有一种,必须等到某个线程处理完成后得到结果才能继续往下处理. 还有一种,等到某个或者所有线程退出后再运行. 线程分离当我们不关心一个线程的返回值的时候,又不需要等待线程退出才能往下运行,这时候等待会导致性能降低,这时候等待就不合适了,但是不等待又会资源泄露,这时候线程分离就极其重要了 在设计线程的时候,线程有很多属性,其中有一个分离属性,分离属性默认值-JOINABLE,表示线程退出后不会自动释放资源,需要被等待; 如果将线程的分离属性设置为其他值-DETACH,这时候则线程退出后将不需要被等待. 退出后自动释放资源,等待会出错.
pthread_self()获取调用线程自己的tid; 一个线程不关心返回值,也不想等待,这种线程适合被分离 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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/16 8:37:44- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |