进程的执行过程

文章目录

  • 前言
  • 一、进程的执行过程
  • 二、进程的示例
    • 2.1 示例1所有进程必须有限或者与时钟相关
    • 2.2 示例2多进程共享变量
    • 2.3 示例3仿真在0时刻结束
    • 2.4 示例4仿真变量保持不变
  • 总结


前言

本文主要记录一下进程的执行过程,并通过一些例子,帮助进一步理解这个过程。


一、进程的执行过程

  • 任意时刻,只有一个事件被执行,其他的进程会被放入READY和WAIT队列中,其中READY队列存放的是,当前时刻将要被执行的事件,WAIT队列存放的是,直到条件满足的阻塞的事件。
  • 当前执行的进程进入等待状态时,会进入WAIT队列,接着执行下一个READY进程。
  • 当所有的进程进入等待队列时,执行仿真时间。
    在这里插入图片描述

二、进程的示例

2.1 示例1所有进程必须有限或者与时钟相关

示例1代码如下所示,问这段代码能否正常工作。
答案是否,原因是在第一个进程中,没有与时间相关的阻塞进程,导致仿真一直卡在0时刻,等待第一个进程中的条件满足。
在这里插入图片描述
修改后,能够正确执行的代码如下,在多进程中,所有的进程必须有限或者与时钟相关。
在这里插入图片描述

2.2 示例2多进程共享变量

示例2代码所示,两个子进程放入了fork-join中,子进程1中的a计算基于b的值,子进程2中的b计算基于a的值,问a和b的最后结果是多少。
结论是a=4, b=8,原因是fork–join会按顺序将两个begin-end包括的子进程放入READY队列,先执行第一个进程得到a=4,再执行第二个进程得到b=8。
在这里插入图片描述

2.3 示例3仿真在0时刻结束

示例3代码如下图所示,task send被fork–join_none包括起来,每次调用都放入后台,不阻塞主进程,而主进程在initial中,通过for循环连续调用16次send,问send能否被执行16次。
答案是否,而且仿真在0时刻就结束了,原因是子进程的任务没有在主进程中被阻塞,主进程initial块在0时刻仿真就结束了。
在这里插入图片描述
要想子进程能够执行16次,需要在主进程中做阻塞处理,保证子进程都结束了,仿真才结束,修改方案有两个,其一是利用wait fork,等待所有的子进程都结束后,再结束仿真,其二是设置一个变量,子进程执行完就加1,主进程中等到该变量到16的时候,再结束仿真。
具体代码实现,参考如下:
在这里插入图片描述

2.4 示例4仿真变量保持不变

接着示例3中的代码,利用wait fork的解决方案,跑完仿真后会发现,传过去的i值一直是16。
在这里插入图片描述
通过展开for循环后,会发现原因是,for循环中发送的16次send使用的是同一个变量i,进程执行的时候,首先会将16个send挨个放入READY队列中,然后再去执行send任务的时间阻塞实体,当执行的时候此时的i是16,这就导致16个send传递的i值都是16,图解如下:
在这里插入图片描述
要解决上面的问题,可以采用local变量,在for循环中,嵌入一个本地变量index,将i的值赋给这个index,然后再将index传递发送出去。
在这里插入图片描述
使用了本地变量后,展开的for循环如下所示,实现了0到15的send。
在这里插入图片描述


总结

本文主要记录一下进程的执行过程,并通过几个示例,进一步加深对进程的理解。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

活字格V9获取图片失败bug,报错404,了解存储路径,已改为批量上传和批量获取

项目场景: 问题描述 原因分析: 解决方案: 完成了批量上传功能,这插件真的很方便 于是写了个批量获取附件的js代码,我真厉害 项目场景: 活字格V9版本获取图片链接Upload 【9.0.103.0】图片上传的存储路…

境外投资企业备案结果公开名录列表数据

境外投资企业备案结果公开名录列表数据 1、时间:更新至2023年10月16日 2、指标:境外投资企业_机构、境内投资者名称、投资国别地区 3、来源:商务部 4、指标解释 境外投资企业(机构)备案结果公开名录列表&#xff…

USB-C显示器:未来显示技术的革新者

随着科技的不断发展,显示技术也在不断进步,而USB-C显示器作为最新的显示技术,正在引领着显示行业的发展潮流。USB-C显示器具有许多优点,如高速传输、便捷连接、节能环保等,使其成为未来显示技术的革新者。 一、USB-C显…

[PHP]严格类型

PHP: 类型声明 - Manual

部署YUM仓库服务

一、yum仓库 1. yum简介 yum是一个基于RPM包(是Red-Hat Package Manager红帽软件包管理器的缩写)构建的软件更新机制,能够自动解决软件包之间的依赖关系。 为什么会有依赖关系的发生 因为linux本身就是以系统简洁为自身优势,所以…

基于 Docker 搭建 Uptime-Kuma 一个极简风的应用监控

GitHub:https://github.com/louislam/uptime-kuma 一、uptime-kuma 介绍 Demo:https://uptime.wuhanjiayou.cn/ uptime-kuma 是一款开源的监控工具, 支持 TCP / PING / HTTP 等多种监控方式,可监测网站,数据库,Docker…

再学css

盒模型 有两种, IE盒子模型、W3C盒子模型;盒模型: 内容(content)、填充(padding)、边界(margin)、 边框(border);区 别: IE的content部分把 border 和 padding计算了进去; 标准盒子模型的模型图 从上图可以看到&#x…

mysql注入联合查询

环境搭建 下载复现漏洞的包 下载小皮面板 将下载好的文件解压在小皮面板的phpstudy_pro\WWW路径下 将这个文件phpstudy_pro\WWW\sqli-labs-php7-master\sql-connections\db-creds.inc 中的密码更改为小皮面板中的密码 选择php版本 在小皮中启动nginx和数据库 使用环回地址访…

react中使用useEffcet抛出错误“超出最大更新深度”

目录 【项目中部分代码】: 【说明】: 【抛出错误】:“超出最大更新深度” 【造成原因】: 【例如:】 【解决】: 【项目中部分代码】: // 类组件中:一进页面就拿到要notiveType的…

H2数据库学习总结

H2数据库-简介 H2 是开源的轻量级Java数据库。它可以嵌入Java应用程序中或以客户端-服务器模式运行。 H2 数据库主要可以配置为作为内存数据库运行,这意味着数据将不会持久存储在磁盘上。 由于具有嵌入式数据库,因此它不用于生产开发,而主要…

《HTML 简易速速上手小册》第6章:HTML 语义与结构(2024 最新版)

文章目录 6.1 语义化标签的重要性6.1.1 基础知识6.1.2 案例 1&#xff1a;使用 <article>, <section>, <aside>, <header>, 和 <footer>6.1.3 案例 2&#xff1a;构建带有嵌套语义化标签的新闻网站6.1.4 案例 3&#xff1a;创建一个带有 <mai…

k8s 进阶实战笔记 | Pod 创建过程详解

Pod 创建过程详解 ​ 初始状态0 controller-manager、scheduler、kubelet组件通过 list-watch 机制与 api-server 通信并检查资源变化 第一步 用户通过 CLI 或者 WEB 端等方式向 api-server 发送创建资源的请求&#xff08;比如&#xff1a;我要创建一个replicaset资源&…

《WebKit 技术内幕》学习之十五(4):Web前端的未来

4 Cordova项目 Cordova是一个开源项目&#xff0c;能够提供将Web网页打包成本地应用格式的可运行文件。读者可能对Cordova项目陌生&#xff0c;但是大家可能对它的前身非常熟悉&#xff0c;那就是PhoneGap项目&#xff0c;它后来被Adobe公司收购。 图15-4描述了Cordova的主要工…

【英语趣味游戏】填字谜(Crossword)第2天

谜题出处 柯林斯字谜大全&#xff08;6&#xff09;&#xff0c;Collins——Big Book of Crosswords (Book 6) Puzzle Number: 115 本期单词 横向 1、Fetch (8) 拿&#xff0c;取&#xff0c;8个字母 答案&#xff1a;Retrieve&#xff0c;取到&#xff0c;拿回 5、Common s…

小白水平理解面试经典题目LeetCode 455 Assign Cookies【Java实现】

455 分配cookies 小白渣翻译&#xff1a; 假设你是一位很棒的父母&#xff0c;想给你的孩子一些饼干。但是&#xff0c;你最多应该给每个孩子一块饼干。 每个孩子 i 都有一个贪婪因子 g[i] &#xff0c;这是孩子满意的 cookie 的最小大小&#xff1b;每个 cookie j 都有一个…

wsl-ubuntu 安装 nginx

wsl-ubuntu 安装 nginx 1. 安装 nginx2. 确认 nginx 启动状态3. 重启 nginx4. 停止 nginx 1. 安装 nginx sudo apt install nginx2. 确认 nginx 启动状态 systemctl status nginx3. 重启 nginx systemctl restart nginx4. 停止 nginx systemctl stop nginx完成&#xff01;…

【基于电商履约场景的 DDD 实战】阿里巴巴开源的 Cola 架构设计

欢迎关注公众号&#xff08;通过文章导读关注&#xff1a;【11来了】&#xff09;&#xff0c;及时收到 AI 前沿项目工具及新技术的推送&#xff01; 在我后台回复 「资料」 可领取编程高频电子书&#xff01; 在我后台回复「面试」可领取硬核面试笔记&#xff01; 文章导读地址…

【数据结构:顺序表】

文章目录 线性表顺序表1.1 顺序表结构的定义1.2 初始化顺序表1.3 检查顺序表空间1.4 打印1.5 尾插1.6 头插1.7 尾删1.8 头删1.9 查找1.10 指定位置插入1.11 删除指定位置数据1.12 销毁顺序表 数据结构(Data Structure)是计算机存储、组织数据的方式&#xff0c;指相互之间存在一…

vue3封装el-pagination分页组件

1、效果如图&#xff1a; 2、分页组件代码&#xff1a; <template><div class"paging"><el-config-provider :locale"zhCn"><el-paginationv-model:current-page"page.currentPage"v-model:page-size"page.pageSize…

C语言第十三弹---VS使用调试技巧

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 VS调试技巧 1、什么是bug 2、什么是调试&#xff08;debug&#xff09;&#xff1f; 3、Debug和Release​编辑​ 4、VS调试快捷键 4.1、环境准备 4.2、调试…