Linux:线程(thread)

目录

一、线程的基本概念

二、进程和线程的核心区别;

三、线程的创建

四、线程的调度

五、线程的消亡

六、多进程和多线程优缺点:(资源丰富用进程,资源紧缺用线程------效率上半斤八两,进程像立交桥,线程像平面交通,如果考虑到)

六、线程相关函数接口


一、线程的基本概念

1.概论:线程是 "轻量级(创建的是栈区)进程(所以有进程特性)",它不能独立存在,必须依附于某个进程(进程是线程的 "资源容器" )。

2.作用:实现并发处理------ 比如一个程序要同时下载文件 + 显示进度,用线程分任务比开多个进程更高效。

3.核心特征:

进程是 "最小资源分配单位"(系统给进程分配内存、文件描述符);线程是 "最小执行单元"(CPU 实际调度的是线程)。

同一进程内的线程是 "平级关系",仅默认存在一个 "主线程"(进程启动后自动创建的第一个线程)。

二、进程和线程的核心区别;

总结:

进程是操榨系统资源分配的最小单元(进程可以独立存在,线程必须依附于进程而存在)

线程是CPU任务调度的最小单元(线程在CPU中会被认为是一个进程)

三、线程的创建

每个线程会创建一个属于该线程的独立的栈空间默认为8M,文本区、数据区、堆区使用进程中的区域

四、线程的调度

等同于进程的调度

宏观并行微观串行

五、线程的消亡

等同于进程的消亡,线程消亡需要回收线程空间

六、多进程和多线程优缺点:(资源丰富用进程,资源紧缺用线程------效率上半斤八两,进程像立交桥,线程像平面交通,如果考虑到)

1.进程(Linux中用得更多)(不同一软件间用进程)

优点:①每个进程空间独立,安全性好,一个进程异常崩溃不影响其余进程

缺点:①多线程调度,效率低,因为切换进程任务时需要映射不同的物理地址空间,增大系统开销 ②多进程通信不方便,因为空间独立,没有共享空间

2.线程(Windows中用得更多)(同一软件内不同任务用线程)

缺点:线程位于进程空间内部,线程异常崩溃会导致进程崩溃,进程中其余的线程均结束

优点:①多线程调度,效率高,因为在同一进程空间内部切换不同任务

②多线程通信非常方便,多线程数据区,堆区共享

③通过锁的机制防止资源竞争

六、线程相关函数接口

注意:

①头文件:#include <pthread.h>

②编译时需链接库

  1. pthread_create

原型:int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);

功能:创建一个线程任务

参数:

thread:存放线程ID空间首地址

attr:线程的属性,使用默认属性传NULL

start_routine:线程函数入口(即线程函数名)

arg:线程函数的参数(没有则使用默认属性传NULL)

返回值

成功:返回0

失败:返回错的数

示例:创建四个线程,每个线程打印自己的id

结果:

补充:

代码改进(pro版):

代码改进(max版):

结果:

  1. pthread_exit

原型:void pthread_exit(void *retval);

作用:线程主动结束自身执行。(与线程函数里的return NULL效果相同)

参数 retval:线程的"返回状态"(可被后续回收操作获取)

返回值:缺省

3.阻塞式回收: pthread_join

原型:int pthread_join(pthread t_thread, void **retval);

作用:阻塞回收线程空间(相当于进程中的wait)(等待指定线程结束,并回收其资)

特点:调用该函数a'a的线程会"阻塞"(暂停执行),直到目标线程结束

参数:

thread:线程

retval:存储目标线程的返回状态(对应 pthread_exit 的参数)

返回值:

成功:返回0

失败:返回非0

应用:

阻塞回收线程空间

实现线程的同步(保证pthread_join后续代码是在线程结束之后执行)

代码:

结果:

  1. pthread_self() //获得线程ID号

使用线程与调函数的区别

相关推荐
0xDevNull8 小时前
Linux切换JDK版本详细教程
linux
进击的丸子8 小时前
虹软人脸服务器版SDK(Linux/ARM Pro)多线程调用及性能优化
linux·数据库·后端
Johny_Zhao2 天前
OpenClaw安装部署教程
linux·人工智能·ai·云计算·系统运维·openclaw
chlk1233 天前
Linux文件权限完全图解:读懂 ls -l 和 chmod 755 背后的秘密
linux·操作系统
舒一笑3 天前
Ubuntu系统安装CodeX出现问题
linux·后端
改一下配置文件3 天前
Ubuntu24.04安装NVIDIA驱动完整指南(含Secure Boot解决方案)
linux
深紫色的三北六号4 天前
Linux 服务器磁盘扩容与目录迁移:rsync + bind mount 实现服务无感迁移(无需修改配置)
linux·扩容·服务迁移
SudosuBash4 天前
[CS:APP 3e] 关于对 第 12 章 读/写者的一点思考和题解 (作业 12.19,12.20,12.21)
linux·并发·操作系统(os)
哈基咪怎么可能是AI4 天前
为什么我就想要「线性历史 + Signed Commits」GitHub 却把我当猴耍 🤬🎙️
linux·github
十日十行5 天前
Linux和window共享文件夹
linux