14. 30字内高并发编程终极指南
并发编程概述
1.同一时间处理多种程序
2.并发三种实现方式
特点
进程 独立虚拟地址空间,资源完全隔离,操作系统内核调度。
线程 同进程内线程共享地址空间一个线程崩溃,整个进程全部销毁;
协程 完全在用户态实现,不经过内核调度,单线程内串行执行
c语言不支持协程,c++支持协程
线程
1.是进程内部的一个控制序列,进行路线。线程在进程的地址空间进行,一切进程至少有一个线程
2.线程也是PCB,多个PCB对应一个地质空间,
*每个线程有自己独立的task_struct,有独立的栈空间,寄存器上下文,信号屏蔽字,线程ID。线程切换只需要在CPU寄存器上下文
地址空间 = 进程大内存仓库(所有人共用)
线程栈 = 每个线程自己单独的小储物柜(每人一个,互不干扰)
优点
1.资源效率方面
2.性能收益方面
缺点
增加调度和同步开销,但可用CPU资源不变,线程不是越多越好
一个线程崩溃,整个进程崩溃,线程之间缺乏内存隔离保护
单线程出现段错误等异常,整个进程都会终止
线程用途
CPU密集型靠并行,IO密集型靠重叠
进程是资源分配的基本单位,线程是调度的基本单位
线程独有
栈空间,寄存器上下文,信号屏蔽字,线程ID,error
单进程:只有一个线程的进程
线程控制
POSIX线程库有关于线程的函数库,
线程控制的api:
pthread_create
创建新线程,分配独立栈,执行指定回调函数。
pthread_exit
线程主动退出,不会影响同进程其他线程。
pthread_join(手动)
主线程等待子线程结束,回收线程资源,能拿到线程返回值。
pthread_detach(自动)
分离线程,线程结束自动释放资源,不用 join 等待。
pthread_self
获取当前线程自身 ID。
pthread_cancel
发送取消请求,终止目标线程(线程有取消点,不会立刻死)。
两种不同线程的ID
线程终止
1.线程函数中的return
2.调用pthred_exit()终止自己,自己正常结束
3.调用pthred_cancel()终止自己,第三方终止正在进行的线程
线程等待
刚退出的线程,其空间没有被释放,仍然在他的进程空间里
pthread_join():等待线程终止收回资源
*不同的终止方式,value_ptr内存的值不同
分离线程特征:
创建后调用 pthread_detach() 标记为分离状态;线程结束后自动释放自身栈、线程资源,无需手动回收;
不能使用 pthread_join() 等待回收,调用会直接失败;
主线程无法获取分离线程的返回值;
主线程退出,所有子线程(含分离线程)会直接被强制销毁;
适合不需要等待、不用接收返回结果的后台任务线程
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)