Linux——线程

1.线程概念

线程是什么:是进程内部的一条执行流,是CPU调度的基本单元。

本质:Linux下线程的本质就是task_struct

Linux下的这个调度单元就是pcb,而这个pcb相较于传统操作系统设计的pcb更加轻量,因此Linux下的线程也被称为轻量级进程

2.进程和线程区别:

从功能性质上的差别:

进程:是系统进行资源分配的基本单元;

线程:是系统中进行CPU调度的基本单元

使用上的差别:针对多任务的处理

多进程:资源消耗成本更高,稳定性更高

多线程:资源消耗的成本更低,调度切换成本更低,线程间通信更加方便,执行粒度更加细致

3.线程间的共享和独有:

共享:进程ID,虚拟地址空间+页表,打开的文件信息,信号信息,进程间通信描述信息....

独有:线程ID,调度上下文信息,线程栈空间.....

4.线程的控制:

Linux下的线程是大佬们封装的一套库函数实现的控制操作的一个函数库

pthread_create ->clone(pcb)

**用户态线程:**针对线程上层封装描述后的执行流+数据的整体

相对独有的数据:用户态线程ID 线程栈内部的局部数据 用户态控制的描述信息

**内核态线程:**就指的是pcb-task_struct

(1)线程创建

pthread_create(&tid,&attr,Func,arg)

LWP:轻量级进程ID

ps -L:进行查看轻量级进程信息

轻量级进程ID:就是task_struct里边的pid,每个轻量级进程唯一的

pthread_t线程ID:虚拟地址空间中线程独有线程描述空间的地址

(2)线程退出

  • 线性入口函数中return(线程入口函数运行完毕,线程就会退出)
  • void pthread_exit(void* retval); 在线程内部调用的任意函数中调用都可以退出线程
  • void pthread_cancel(pthread_t tid);取消一个线程
  • 被取消的线程,它的返回值没有参考意义的(是一个固定值:PTHREAD_CABCELED)

(3)线程等待

等待指定线程退出,获取返回值,释放它的所有资源

int pthread_join(pthread_t tid,void** retval);

(4)线程分离

设置线程的分离属性:从joinable设置为detach状态

线程一旦被分离,线程退出后,就会自动释放所有的资源,不需要被等待,也不能被等待

void pthread_detach(pthread_t tid);

应用场景:当我们不关系一个线程的返回值,而且也不希望阻塞在等待上,则使线程分离

5.线程安全

多个线程之间对同一份临界资源的访问安全性要求

如何实现:同步+互斥;

互斥的实现:互斥锁

同步的实现:条件变量,信号量

读写锁

自旋锁

锁的种类

死锁

生产者消费者模型

读者写者模型

1.什么是并发,什么是并行?

相关推荐
2401_87241878几秒前
把 Ubuntu 服务器变成 AI Agent 终端:用自然语言或语音管理 Linux,任何命令都先审批(附完整 Python 源码)
linux·服务器·ubuntu·agent
coderSong256822 分钟前
【Ubuntu】ctrl+shift+f 繁体中文切换、VScode全集搜索
linux·vscode·ubuntu
AR-26710-34 分钟前
Linux Day22——复习第三部分
linux·运维
迪康coolmu34 分钟前
基于迪康端点安全一体化管理系统的公用终端上机与信创补丁实战
linux·运维·服务器·网络·安全·电脑
blueSatchel37 分钟前
imx6ull显示控制器设备驱动解读
linux·嵌入式
水饺编程41 分钟前
第2章:Linux 基础,关机命令
linux·c语言·汇编
JiMoKuangXiangQu42 分钟前
Linux CFS 负载均衡:从 CPU 拓扑到任务迁移
linux·负载均衡
91刘仁德42 分钟前
计算机网络核心协议全解析:从MAC帧到HTTP
linux·网络·网络协议·tcp/ip·计算机网络·http·udp
Brilliantwxx1 小时前
【Linux】IO(上)全篇:文件本质、C 接口、系统调用与文件描述符
linux·运维·服务器·c语言
承渊政道1 小时前
Linux网络学习【深入理解应用层HTTP协议、Cookie与Session机制及HTTPS协议原理】
linux·网络·学习·http·cookie·session