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

相关推荐
一直走下去-明24 分钟前
centos7无法安装tcpreplay
linux·运维
吹什么轩27 分钟前
linux网络:TCP套接字基础
linux·网络·tcp/ip
时空无限1 小时前
ubuntu dpkg -l 输出第一列解释
linux·运维·ubuntu
叮咚侠4 小时前
Ubuntu 24.04 安装zabbix-agent 5.0 服务
linux·ubuntu·zabbix·zabbix-agent
左手厨刀右手茼蒿6 小时前
数据仓库的架构演进:从MySQL到ClickHouse到数据湖的工程化实践
linux·嵌入式·系统内核
左手厨刀右手茼蒿6 小时前
创业团队技术选型:别用大厂架构解决小团队问题
linux·嵌入式·系统内核
bosins7 小时前
将 Hyper-V 上的 Ubuntu 虚拟机内容迁移到 WSL (Windows Subsystem for Linux) 中
linux·windows·ubuntu
我星期八休息7 小时前
扩展—DNS与ICMP
linux·服务器·网络
筝筝ba8 小时前
linux 查询当前登录的用户数量
linux·服务器·网络
吉甫作诵8 小时前
MySQL 8.4.10 二进制包安装教程(Linux 环境)
linux·mysql