一篇文章搞懂操作系统进程、线程和协程
前言
看了很多关于进程线程以及近些年出现的协程的文章,总感觉描述的太理论性质了,所以今天决定自己来写一篇文章来说明这个问题,背概念永远是枯燥的,我们要学会从计算机工作原理上来理解,进程线程协程的出现到底解决了什么问题,我们就能够比较轻松和从实质上面更加深刻的理解。说到这个话题,有必要提及一些基本的计算机设计理论知识以及计算机的发展历程。
一、先讲讲计算机的组成与发展
学过计算机或者计算机专业的人都不会对于这个话题过于陌生,好像知道一点但是又不是记得特别清晰。一般来说包含这些部分。
计算:CPU,GPU
连接:主板
存储:机械硬盘,SSD,内存,光盘等
外设:显示器,鼠标,键盘,音箱等
其他;机箱,风扇等等
我们都知道的是其实CPU和内存是比较昂贵和最具技术含量的设备,同时也是最稀缺的,为什么要介绍这些东西,因为进程线程协程的就是在充分利用这些稀缺资源和计算机系统的不断进步过程中不断衍生出来,为了解决某些问题的。
计算机的发展大致经历了无操作系统、批处理操作系统、分时操作系统三个阶段。无操作系统的时候,需要大量人工调试电频来促使计算机操作,那时的计算机体量非常大,相信大家多少从课本上了解过世界上第一台计算机的状况。后面演化到现在的便携式笔记本电脑,无论是技术还是体验都发生了翻天覆地的变化。
二、进程线程和协程
1.进程
上面说了这么多,进程这些到底解决了什么问题呢,其实早期的操作系统,都只能运行一个程序,也就是一个用户主进程,大家可以想象一下早期的手机系统就可以理解,再新开一个应用的时候,另外一个应用就自动关闭了,因为可能使用计算机的时候,计算机已经支持多道程序设计模式了。操作系统进程的出现就是为了实现多道程序设计的方案,不可能说我一个计算机运行另外一个程序要把其他程序全部关闭,大家想想这样肯定都是不友好的,因此进程出现了,由操作系统通过进程来灵活管理着整个计算机,大家在windows
系统下面,查看任务管理器的时候,一定查看过进程的相关情况。进程存在的最主要目的是隔离资源与运行环境同时提升计算机资源的利用率(资源包含cpu,内存等)。隔离资源也是相当重要的,不至于说一个程序崩溃把整个机器都整挂了。
所以这里我们再回到进程的定义,进程是操作系统进行资源分配和调度的基本单位
,也就顺利成章的明白了。
2.线程
说了这么多,那线程又是怎么回事呢,其实进程都是是依靠线程去执行的,一个进程里面含有1个或者多个线程,一般来说,多个线程是共享当前进程数据与资源的,这样使得同一个进程内部的线程切换更加高效和方便,本质上也是提高cpu的利用率进而提升程序的并发以及执行效率,
因为进程的切换的耗时是远大于线程的,所以这里再回到线程的定义,线程是操作系统进行运行调度的的最小单元。
我们经常听到的CPU参数,8核16线程,这里的线程与现在讲到的线程是紧密相连的。
3.协程
最后来说说协程,协程的概念其实几十年前就已经被提出来了,只是近些年才火起来,目前很多主流的程序语言都实现了协程的方案,如Python、Golang、PHP Swoole等。一般来说,说到线程一般是指内核级别的线程,协程又称协作的线程,用户级别下面的线程
,之所以叫用户态的线程,是线程的管理和运行是在用户态下面实现的,内核是不清楚具体有哪些协程,之所以叫协作的线程,是因为往往用户态的多个协程在与内核态的某一个线程打交道,优先级是由协程之间自行调度的,所以在用户态的切换更加轻量,
但是也会有一些问题,例如调度如果不够优化,会导致协程层面的卡顿与崩溃。不过目前很多协程方面的技术发展的已经相对成熟了。
总结
以上就是今天要讲的内容,本文大致宏观的介绍了进程、线程和协程的区别。书山有路勤为径,学海无涯苦作舟,后面将继续分享协程的具体实现,欢迎大家关注。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
2019-03-26 PHP将SESSION存储到Redis中