热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

操作系统的线程和进程的区别_理解操作系统:就像吃饭一样(进程、线程等)...

理解吃饭本文共991字,用简单的类比探索计算机科学的哲理。理解操作系统:就像吃饭一样01最熟悉的陌生人类比这种方法并不严谨,但它会帮你快速

 理解吃饭

caec453d41d09b747a650ef4da47c7fa.png

本文共991字,用简单的类比探索计算机科学的哲理。

理解操作系统:就像吃饭一样

01

最熟悉的陌生人

类比这种方法并不严谨,但它会帮你快速找到自己想要的方向。

Hobo吃撑了,公众号:又吃撑了理解操作系统:就像吃饭一样(内存篇)

我们无时不刻不在和进程、线程、轻量化进程、协程等打交道,它们就是活跃在内存和CPU之间的动态实体,是它们造成了计算机的交互和程式化,是计算机中我们“最熟悉的陌生人”。

前期文章将进程“大人吃的大碗饭菜,小孩吃的小碗饭菜”,线程比作“大小碗饭菜里不同的菜和饭”,轻量化进程、协程比作“拌好的一汤匙更易食的菜和饭”,表示它们之间有着层次递进的关系,越细致说明越容易成为组件,越宽泛说明越是集合体。

我们用“色香味形意”去形容饭菜,也会使用一些属性去描述进程(线程、协程等,下同),例如饭菜的香就可以类比为进程的信号描述,我们顺着香气寻找美味的事物,操作系统利用信号调动一个个进程。这里将进程的其他重要描述信息列举如下:进程基本信息、指向内存描述符的指针、与进程相关的tty、当前目录、指向文件描述符的指针等。

02

变换角度看进程

前期文章提到过内核态调用可类比吃需要后厨加工的事物,而用户态可类比吃直接可以吃的事物,如西红柿等。那么问题来了,厨子和食客对待饭菜的角度一样吗?

一边看到油盐酱醋茶和食物材料,而另一边只是看到香喷喷的饭菜,当然不一样!

所以进程这东西同理的,我们可以用封装简化的角度去考虑,但实际上内核处理它、CPU处理它要层层分解,这会导致一些认知上的偏差。

以进程的最基本描述符,编号,pid,举例。如下图,从用户视图来看,可能只有两个进程在运行,但是对于系统内核来说,42号进程的同组进程也是需要单独管理的,是需要单独加工处理的!我们一般说的PID/pid即是用户视图(USER VIEW)的编号。

bc833cf1efc5960c4916193ca2fa7ba4.png

03

假设进程有生命

这是一个很有意思的类比,因为操作系统或者说电脑正是因为动态化的原因让人感到AI生命的未来可期。

进程作为设想的“AI生命”的细胞,状态机就是它的生老病死,也可类比食物的生长、加工、消化、腐烂。这就是进程的复制(衍生)、结束。

一旦有了生命,那就一定要争抢资源的,这是求生的本能,所谓的“竞态”。有竞争的时候,排队是少不了的,甚至还需要等待区,有的时候还要有各种规则来约束。这里就蕴含着进程的切换。

生命短暂,进程亦如此,记住一切都为了高效。

往期推荐

理解操作系统:就像吃饭一样

操作系统各种延时时间

[入门级]编程语言选择思维导图

“护航效应”与社会调度法则

点击蓝字

关注我们




推荐阅读
  • 本文详细探讨了如何通过分析单个或多个线程在瓶颈情况下的表现,来了解处理器资源的消耗。无论是单进程还是多进程环境,监控关键指标如线程数量、占用时间及调度优先级等,有助于揭示潜在的性能问题。 ... [详细]
  • 使用Powershell Studio快速构建GUI应用程序
    本文介绍了如何利用Powershell Studio创建功能强大的可视化界面。相较于传统的开发工具,Powershell Studio提供了更为简便和高效的开发体验,尤其适合需要快速构建图形用户界面(GUI)的场景。 ... [详细]
  • 对于许多初学者而言,遇到总线错误(bus error)或段错误(segmentation fault/core dump)是极其令人困扰的。本文详细探讨了这两种错误的成因、表现形式及解决方法,并提供了实用的调试技巧。 ... [详细]
  • 深入理解Java多线程并发处理:基础与实践
    本文探讨了Java中的多线程并发处理机制,从基本概念到实际应用,帮助读者全面理解并掌握多线程编程技巧。通过实例解析和理论阐述,确保初学者也能轻松入门。 ... [详细]
  • 本文详细介绍如何使用 Apache Spark 执行基本任务,包括启动 Spark Shell、运行示例程序以及编写简单的 WordCount 程序。同时提供了参数配置的注意事项和优化建议。 ... [详细]
  • Java项目分层架构设计与实践
    本文探讨了Java项目中应用分层的最佳实践,不仅介绍了常见的三层架构(Controller、Service、DAO),还深入分析了各层的职责划分及优化建议。通过合理的分层设计,可以提高代码的可维护性、扩展性和团队协作效率。 ... [详细]
  • 本教程将详细介绍Python中的包、模块、类和函数的概念,探讨它们在程序中的作用及相互关系,帮助读者更好地理解Python的结构化编程。 ... [详细]
  • 使用Nginx反向代理实现多域名端口映射
    本文介绍如何通过配置本地hosts文件和Nginx反向代理,实现多个虚拟域名的端口映射,使用户可以通过标准HTTP端口80访问不同后端服务。 ... [详细]
  • 历经三十年的开发,Mathematica 已成为技术计算领域的标杆,为全球的技术创新者、教育工作者、学生及其他用户提供了一个领先的计算平台。最新版本 Mathematica 12.3.1 增加了多项核心语言、数学计算、可视化和图形处理的新功能。 ... [详细]
  • 深入解析Serverless架构模式
    本文将详细介绍Serverless架构模式的核心概念、工作原理及其优势。通过对比传统架构,探讨Serverless如何简化应用开发与运维流程,并介绍当前主流的Serverless平台。 ... [详细]
  • Linux环境下C语言实现定时向文件写入当前时间
    本文介绍如何在Linux系统中使用C语言编程,实现在每秒钟向指定文件中写入当前时间戳。通过此示例,读者可以了解基本的文件操作、时间处理以及循环控制。 ... [详细]
  • 使用PHP实现网站访客计数器的完整指南
    本文详细介绍了如何利用PHP构建一个简易的网站访客统计系统。通过具体的代码示例和详细的解释,帮助开发者理解和实现这一功能,适用于初学者和有一定经验的开发人员。 ... [详细]
  • 离线安装Grafana Cloudera Manager插件并监控CDH集群
    本文详细介绍如何离线安装Cloudera Manager (CM) 插件,并通过Grafana监控CDH集群的健康状况和资源使用情况。该插件利用CM提供的API接口进行数据获取和展示。 ... [详细]
  • 在尝试使用C# Windows Forms客户端通过SignalR连接到ASP.NET服务器时,遇到了内部服务器错误(500)。本文将详细探讨问题的原因及解决方案。 ... [详细]
  • 本文回顾了2017年的转型和2018年的收获,分享了几家知名互联网公司提供的工作机会及面试体验。 ... [详细]
author-avatar
翟厉害
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有