面试题:进程 线程 协程

news2024/9/20 10:58:51

 

进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位

通俗的讲:进程可以理解为我们在电脑上正在运行的一个个应用,例如:QQ,微信,LOL

 

打开一个浏览器就是一个进程,打开两个浏览器就是两个进程,进程和进程之间具有独立性,它们具有各自的虚拟地址空间和文件描述符

线程 thread

线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。同一个进程的多个线程之间是共享同一份虚拟空间地址和文件描述符的。在一个进程中的多线程,可以并发的执行(后面有并发的介绍)。就拿百度网盘来说,如果有下载任何和上传任务的话,那么百度网盘这个进程里面至少有两个线程来完成工作,一个是上传 一个是下载

 

  • 我们使用htop来看一下,百度网盘开了几个线程

  • 进程和线程我们都讲过了,那么现在来问一个问题,如何实现多任务?其实如果你看完了进程和线程应该也能明白,多任务嘛,可以 多进程 也可以多线程,还可以采用多进程+多线程的方式

协程coroutine

在详细讲解协程之前,我们先看一下这个场景,比如一个饭店有两个厨师,一个小工,小工负责摘菜 洗菜 啥的,那么饭店运转的时候,其实就有三个线程,这没有问题,但是忽然有一天小工请假了,就剩下两个厨师了?怎么办?老板这时候说,你看你俩也不是很忙,有人点菜的时候就炒菜,没人点菜的时候就洗洗菜啥的,别闲着(周扒皮已上线),明白了吧,就是为了更高效率的利用线程,而不是频繁的创建线程 销毁线程 以及CPU频繁的切换上下文,不能让线程闲着

  • 协程,英文Coroutines,是一种基于线程之上,但又比线程更加轻量级的存在,因为是自主开辟的异步任务,所以很多人也更喜欢叫它们纤程(Fiber),或者绿色线程(GreenThread)。正如一个进程可以拥有多个线程一样,一个线程也可以拥有多个协程。具有对内核来说不可见的特性。(其实这里有一个问题,就是协程是无序的,那么我们怎么保证数据的事务性呢?有好的想法可以和我交流哦)

进程的状态

三种基本状态

三种基本状态:就绪态、执行态、阻塞态。这三种基本状态每个OS 中都会有的,因些称为基本态,下而是给出三种基本状态的定义:

  • 就绪(Ready)状态 通过Ready 我们可以看到,处于此状态的进程已经处于准备好要运行了。此时进程已经分配好除CPU 外的所有必要资源,只需要获得CPU,便可立即执行。处于就绪态的进程都是在就绪队列中,等待着调度程序的调度(分配CPU)。

  • 执行(Running)状态 处于此状态的进程是已经获得CPU 且正在执行中。对于这一状态,在单CPU OS 中,同一时刻只能有一个进程处于此状态,而在多CPU OS,则可以有多个(不超过CPU 的数量)进程同时处于执行状态。

  • 阻塞(Block)状态 处于此状态的进程是因为在执行的过程中由于发生某种需要等待的事件(I/O 请求,申请缓存失败,等待接收数据等),而暂时无法继续运行。在多道批处理系统中,此时需要进程把处理机释放,并选取新的就绪进程执行。与就绪队列相对应的,处于阻塞状态的进程都在阻塞队列中,某些OS 中,出于提高效率的目的,根据阻塞的原因,会有多个阻塞队列。

 

在这里插入图片描述

上图是进程的三种基本状态的转换图,进程在运行的过程中会经常的发生状态的转换。从图中我们可以看到,就绪态和执行态是可以相互转换的,但是执行态到阻塞态是单向的,这是因为就算阻塞的进程“通畅” 了,因为处理机已经分配给别的进程了,因此进程的状态只能切换到就绪态,并且也是单项的,因为等待的事件也只可以在执行中才能发生。

创建状态和终止状态

我们知道,进程创建时,需要对其分配除CPU处的所有的必要资源, 但是,如果此时OS 因为资源不足无法给进程分配资源,那么进程应该处于什么状态呢?

为了满足上述问题,满足进程状态的完整性以及增强管理的灵活性, 通常会在OS中为进程新增两种常见的状态:创建状态和终止状态。

下面给出两种状态的定义:

创建状态 进程创建的过程中,所需的资源尚不能得到满足,此时创建工作尚未完成,进程无法被调度执度,进程此时就处于创建状态。终止状态 进程正常运行结束或都出现导致进程终止的错误,或是被 os 所终结,或是被父过程终结,则进入终止状态。进入终止状太的进程将不能再执行,但是OS 依然保持一个记录,其中保存着状态码和计时器统计数据,等待别的进程收集,一旦资源被收集完成,OS 会立即删除该进程。

认识并发和并行

  • 如果我们第一次理解并发,很容易理解错误,认为并发 就是同时发生的意思,而慢慢的,你会了解到并行,那么我们就先看看并发和并行。
  • 并发 并发是指一个cpu交替执行多个任务,而不是同时执行,只不过因为CPU执行的速度过快,而会使得人们感到是在“同时”执行,执行的先后取决于各个程序对于时间片资源的争夺。通俗点理解,并发就像一个厨师架了两口锅,一个炒西红柿鸡蛋,一个炒尖椒肉丝,猛一想,好像是一个厨师同时在炒两个菜,但其实,同一个时刻,厨师只能颠一个勺,颠完西红柿鸡蛋颠尖椒肉丝。来回切换。这里面的厨师 就是CPU 。西红柿鸡蛋和尖椒肉丝就是要处理的线程。
  • 并行:多个CPU同时执行多个任务,就好像有两个程序,这两个程序是真的在两个不同的CPU内同时被执行。我想起来小时候家里养的一头母猪,可以同时奶12个猪仔(一般母猪有6对乳头,即12个乳头,养殖必备知识点,记一下),对应起来,这头母猪其实就是一个12核的计算机,同时奶12个猪仔这件事情,就是并行(尴尬的笑😁)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/99782.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构---寻找一个整数所有数字全排列的下一个数

寻找一个整数所有数字全排列的下一个数储备知识第一步第二步第三步JAVA实现给出一个正整数,找出这个正整数所有数字全排列的下一个数。说通俗点就是在一个整数所包含数字的全部组合中,找到一个大于且仅大于原数的新整数。 例子: 如果输入123…

【翻译】GPT-3是如何工作的

前排提示 这是我补充的内容,仅代表个人观点,和作者本人无关。 主要是意译我的补充,想看原文表达的拖到最底下有链接。 原文翻译 在科技界我们可以看到很多关于GPT-3的新闻。大型语言模型(比如GPT-3)已经展示出让我们惊…

[附源码]Python计算机毕业设计Django现代诗歌交流平台

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

一篇ThreadLocal走天下

尺有所短,寸有所长;不忘初心,方得始终。 请关注公众号:星河之码 在面试的时候经常会有人文ThreadLocal是啥,首先明确的一点是:虽然ThreadLocal提供了一种解决多线程环境下成员变量的问题,但是Th…

SSM框架学习记录-SpringMVC_day01

1.SpringMVC概述 SpringMVC功能与优点 SpringMVC是一种基于Java实现MVC模型的轻量级Web框架 SpringMVC技术与Servlet技术功能一样(对Servlet进行了封装),都属于Web层开发技术 SpringMVC的主要的作用就是用来接收前端发过来的请求和数据然后经过处理并将处理的结果…

自定义注解实现参数校验

个人博客地址: http://xiaohe-blog.top/ 文章目录1. 为什么要进行参数校验2. 如何实现参数校验3. 注解实现参数校验4. 自定义注解实现参数校验1. 为什么要进行参数校验 在后端进行工作时,需要接收前端传来的数据去数据库查询,但是如果有些数…

目前智慧工厂建设面临的急需解决的问题有哪些?

当前国内诸多制造业企业面临着巨大的转型压力。一方面,劳动力成本迅速攀升、产能过剩、竞争激烈、客户个性化需求日益增长等因素,迫使制造企业从低成本竞争策略转向建立差异化竞争优势。具体在工厂层面,制造企业面临着招工难,以及…

去应聘测试管理职位时遇到的面试题

前言: 在测试管理的路上,少不了招聘测试管理的测试人员,或自己去应聘测试管理人员的时候,因此梳理了关于测试管理职位的面试题: 1、请你列举你曾经担任的测试工作职位? 2、你认为项目测试经理的工作职责和…

简单个人网页设计作业 静态HTML个人博客主页 DW个人网站模板下载 大学生简单个人网页作品代码 个人网页制作 学生个人网页设计作业

🎉精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

【印刷字符识别】OCR键盘数字+字母识别【含Matlab源码 807期】

⛄一、OCR简介 1 什么是OCR技术? OCR英文全称是Optical Character Recognition,中文叫做光学字符识别。它是利用光学技术和计算机技术把印在或写在纸上的文字读取出来,并转换成一种计算机能够接受、人又可以理解的格式。文字识别是计算机视觉…

Java项目:SSM服装出租服装店租赁服装管理系统

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目为后台管理系统; 管理员角色包含以下功能: 管理员登录,用户管理,公告管理,服装类型管理,服装信息管理,客户信息管…

计算机毕设Python+Vue新生报到管理(程序+LW+部署)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Java项目:SSM在线甜品商城平台

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 管理员角色包含以下功能: 管理员登录,套餐管理,甜品管理,预定管理等功能。 用户角色包含以下功能: 用户登录与注册,查看…

Activiti7-流程变量

流程变量 流程变量的作用域 设置流程定义的key为myEvection2 使用流程变量 定义好流程变量后&#xff0c;就可以在整个流程定义中使用这些流程变量了。例如可以在某些任务属性如 assignee上使用${assignee}&#xff0c;或者在某些连线上使用${day<3}。 Activiti中可以使用…

C语言初阶_初识C语言(2)

我尝试用这博客记录下我所热爱 ​我只不过是个无名小辈 ​无休止地更新 ​在名利中苦苦挣扎 ​世事变幻莫测 ​就算每一次早早被淘汰 ​在失败边缘挣扎 我的数据结构与算法系列开始了&#xff0c;有一定C语言基础的同学可以去学习&#xff01; 数据结构与算法_时间复杂度 有…

jmeter下载及安装配置

目录&#xff1a;导读 前言 jmeter环境 jmeter环境变量配置如下&#xff1a; &#xff08;1&#xff09;新增JMETER_HOME变量 &#xff08;2&#xff09;配置Path环境变量&#xff1a; &#xff08;3&#xff09;配置CLASSPATH变量&#xff0c;加上&#xff1a; &#xf…

计算机毕业设计——基于html智能家电购物商城项目的设计与实现

常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动漫、 服装、 体育、 化妆品、 物流、 环保、 书籍、 婚纱、 游戏、 节日、 戒烟、 电影、 摄影、 文化、 家乡、 鲜花、 礼品、 汽车、 其他等网页设计题目, A…

【SpringMVC】使用篇:SpringMVC的开始

目录 一、前言 二、RequestMapping 三、params表达式 四、Ant风格资源地址 五、PathVariable 六、Rest风格的请求数据 七、请求映射数据 相关文章 【SpringMVC】入门篇&#xff1a;带你了解SpringMVC的执行流程【SpringMVC】入门篇&#xff1a;带你了解SpringMVC的执行流程一、…

使用MMA解决拓扑优化问题的并行框架

使用MMA解决拓扑优化问题的并行框架 仅个人论文学习笔记。 本文的重点是用c实现的完全并行拓扑优化框架&#xff08;线性求解器和优化算法&#xff09;&#xff0c;将MMA(Method of Moving Asymptotes)优化算法并行化&#xff0c;作为代码的基本部分。 实现一个拓扑优化问题 在…

vitepress+gitee pages搭建自己的博客网站

概述 “不写博客的GISer不是一个好程序员”。所以&#xff0c;好多程序员会保留着写博客的习惯&#xff0c;一方面记录自己的学习成果或者解决某个问题的方法&#xff0c;一方面能够帮助到他人&#xff0c;再一方面也能够督促自己多学点东西……这是一个一举N得的事情。上为其…