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.什么是并发,什么是并行?

相关推荐
yi0114 分钟前
LeetCode 134 加油站:从 双循环暴力 演变到 贪心
linux·算法·leetcode
醇氧19 分钟前
CentOS7.9 Yum 安装 Redis6.x(RPM 包,无需编译,推荐 remi 源)
linux·python
傲世仙尊37 分钟前
重写的顿悟-lambda类型擦除条件变量的真相与sendto里的bind
linux·网络
zhangrelay1 小时前
ROS2 Lyrical实验5导航Nav2
linux·笔记·学习·ubuntu·机器人
一条破秋裤1 小时前
Linux 线程分离与主动取消:pthread_detach、pthread_cancel
java·linux·jvm
j7~1 小时前
【Linux网络】四十六.《高级 IO (上篇)》-- 详解
linux·运维·网络
IT大白鼠1 小时前
彭大帅的AI运维助手——自然语言管理 Linux 集群与网络设备——第 0 篇 · 导读:把 Linux 运维交给 AI,到底靠谱吗
linux·运维·人工智能
AI智讯中枢2 小时前
高性能 C++ 实战 (五):perf+FlameGraph 火焰图生产实战,精准定位 CPU / 缓存 / 锁瓶颈,避坑 + 完整实操案例
linux·c++·性能调优·性能分析·perf·flamegraph·火焰图
xbzb2 小时前
Linux SELinux 安全加固与标签排错手册
linux·运维·安全
江屿风3 小时前
【Linux系统】【从【收尾】缓冲区到【新开】磁盘块:一节课打通文件系统底层原理】流食般投喂
linux·运维·服务器·人工智能·笔记