【操作系统】聊聊进程、线程、协程

进程内部有那些数据

为什么创建进程的成本高

进程和线程

进程是资源分配的基本单位,而线程是程序执行的基本单位,一个是从资源分配的角度看,另一个是执行角度。

那么进程和程序的区别是什么?

程序,一段代码,一组指令的有序集合。

进程:程序的一次动态运行,通过进程控制块唯一的标识这个进程。

进程:动态,有资源,有唯一标识,有并发性;

程序:静 态,无资源,无唯一标识,无并发性。

进程是操作系统从安全角度出发进行设计的隔离单位,但是进程在使用的时候,unix是通过fork,先clone,然后在使用,这个设计其实不是很优雅。

线程的出现本质是为了解决同一个软件内会有多个任务的需求,这些任务在相同的地址空间,可以相关操作资源。

协程与goroutine

进程和线程其实对于大多数非高性能服务来说,其实是没问题,但是目前主流的互联网应用基本都是高性能网络服务。

正常情况下的线程模式

大多数的请求都是因为在存储这部分被阻塞,其中包含如下

  • 系统调用机制的开销
  • 数据多次拷贝 内核态到用户态
  • 线程的空间和时间成本。

而为了提升网络服务器的吞吐能力,目前使用的是epoll,基本就是通过IO多路复用机制实现,少等待,统一的一个线程查询谁处理完,然后去通知处理。而本质是通过减少了线程。系统调用和内存拷贝并没有减少。

线程的成本

时间成本

  • 切换本身的开销,寄存器保存和恢复的成本
  • 调度开销,
  • 同步与互斥成本

空间成本

  • 执行体的执行状态
  • TLS(线程局部存储)
  • 执行体的堆栈

所以综上所属,协程解决的问题是

  • 回归到同步IO的编程模式
  • 降低执行体的空间和时间成本

协程的本质就是用户态下的线程。

Go语言中goroutine。

  • 堆栈自动增长
  • 没有线程局部存储
  • 同步、互斥和通信
  • 提供了重要的系统调用的包装

状态

进程状态

  • 创建
  • 就绪
  • 运行
  • 阻塞

其实创建、就绪、运行比较好理解,阻塞比较难理解,

阻塞其实就是当进程需要等待网络IO或者本地IO的时候,需要等待结果,只能一直等待。

小结

本篇主要介绍了进程、线程、协程,以及进程的状态,其实和线程也是通用的。

相关推荐
OpenAnolis小助手1 天前
RISC-V 基础软件的工程化与性能优化实践
性能优化·操作系统·龙蜥社区·risc-v
青梅味猪大肠2 天前
【操作系统-60】临近适应算法
java·linux·开发语言·嵌入式硬件·算法·操作系统
PMAOS5 天前
4G 功能机操作系统选型指南:KaiOS、Mocor、MAUI、PMAOS 的能力边界与验证方法
嵌入式硬件·ai·操作系统
罗四强5 天前
第10篇:打包上架:签名、打包 HAP、发布到华为应用市场
分布式·操作系统·harmonyos·arkts·鸿蒙系统
Liaiyang667 天前
空圈容错视角-HarmonyOS 7 架构体检:从被动容错到主动免疫的真伪验证与生态反推
操作系统·harmonyos·架构设计·ai-agent·端云协同·鸿蒙7·空圈容错
OpenAnolis小助手7 天前
龙蜥社区亮相 GOSIM AI Vision Forum 共话“Agentic Native”开源新
人工智能·ai·开源·操作系统·龙蜥社区·agent
阿里云基础软件7 天前
Agent 任务提速 10.71%,内存占用降低 21.60%|Alibaba Cloud Linux 4 重大发布
java·linux·人工智能·操作系统·agent
OpenAnolis小助手8 天前
多租户公有云共享 CXL 内存池场景下的内存卸载研究
人工智能·操作系统·龙蜥社区·risc-v·agentic os
OpenAnolis小助手11 天前
PHP 两个严重漏洞曝光,龙蜥社区 24 小时完成 3 版本修复
开发语言·操作系统·php·龙蜥社区
硅基手札11 天前
操作系统设计思想系列 13 · NuttX 深度 — POSIX 飞控底座 + RTOS 群像
架构·操作系统·嵌入式开发·ecos·sel4·nuttx