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号

使用线程与调函数的区别

相关推荐
草莓熊Lotso5 小时前
【Redis 初阶】Set 类型深度解析:去重集合的运算能力与实战场景
linux·网络·数据库·windows·redis·tcp/ip·缓存
张文君5 小时前
ubuntu26.04坏道坏块分区隔离急速版260831-V0.12
linux·python
Interview Aid1125 小时前
TikTok OA 四题分享|半小时内 AC,题目基本都是实现题
java·开发语言·算法·面试·职场和发展
CoderIsArt12 小时前
C#中UI 线程与 Dispatcher
开发语言·ui·c#
贝锐13 小时前
从国产化信创设备到商用安卓终端,向日葵如何帮助企业实现统一运维管理?
linux·运维·远程控制
Julien200415 小时前
调查和解决 SELinux 问题
linux·运维·服务器·网络·学习方法
AI情绪识别开源15 小时前
检信 ALLEMOTION OS 加密打包可执行程序 — 全面测试报告版本: v1.3功能测试 / 性能测试 /
开发语言·数据结构·人工智能·功能测试
「QT(C++)开发工程师」16 小时前
C++ auto 用法详解
开发语言·c++
OPEN-F16 小时前
C++STL教程:容器适配器与实用工具
开发语言·c++