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


    进程内部有那些数据
    为什么创建进程的成本高

    进程和线程

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

    那么进程和程序的区别是什么?
    程序,一段代码,一组指令的有序集合。
    进程:程序的一次动态运行,通过进程控制块唯一的标识这个进程。
    进程:动态,有资源,有唯一标识,有并发性;
    程序:静 态,无资源,无唯一标识,无并发性。
    在这里插入图片描述
    进程是操作系统从安全角度出发进行设计的隔离单位,但是进程在使用的时候,unix是通过fork,先clone,然后在使用,这个设计其实不是很优雅。

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

    协程与goroutine

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

    正常情况下的线程模式
    在这里插入图片描述
    大多数的请求都是因为在存储这部分被阻塞,其中包含如下

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

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

    线程的成本
    时间成本

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

    空间成本

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

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

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

    协程的本质就是用户态下的线程。
    Go语言中goroutine。

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

    状态

    进程状态

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

    其实创建、就绪、运行比较好理解,阻塞比较难理解,
    阻塞其实就是当进程需要等待网络IO或者本地IO的时候,需要等待结果,只能一直等待。
    在这里插入图片描述
    在这里插入图片描述

    小结

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

  • 相关阅读:
    Ansible-变量及加密
    HTML + HTTP请求 +CSS知识点
    【GPT-2】论文解读:Language Models are Unsupervised Multitask Learners
    网络参考资料汇总(1)
    七大排序--万字详解
    [FBCTF2019]RCEService
    手写线程池,能进行任务窃取的线程池---注释
    电子学:第011课——实验 10:晶体管开关
    【云原生之Docker实战】使用Docker部署Filebrowser文件管理系统
    奇安信发布《2024人工智能安全报告》,AI深度伪造欺诈激增30倍
  • 原文地址:https://blog.csdn.net/jia970426/article/details/132818495