操作系统中的线程&进程和同步&异步和并发&并行

2023-11-20

一、进程和线程

1.1 进程

操作系统进行资源分配的最小单元。是程序的一次执行。

1.2 线程

操作系统进行任务调度的最小单元,线程包含在进程中。处在同一个进程中的多个线程之间共享进程的代码段、公有数据。

1.3 实现多任务的方法

1.3.1 使用多进程实现多任务

一个进程只包含一个线程,符合现代操作系统进行任务调度的原则。

在这里插入图片描述

1.3.2 使用多线程(单个进程包含多个线程)实现多任务

这种模式不稳定,只要一个线程崩溃,整个进程就会崩溃。

在这里插入图片描述

1.3.3 使用多进程+多进程实现多任务

高效、安全,但是复杂度最高。同时这也是现代操作系统普遍采用的模式。

在这里插入图片描述

1.4 进程和线程的比较

进程的创建开销比较大,线程的创建开销比较小。

进程之间的通信慢与线程之间的通信,原因是处在同一个进程中的线程共享进程的一些资源。

1.5 Java的多线程模型的应用

  • 网络
  • 数据库
  • Web开发

二、同步和异步

区分同步和异步最有效的方法,就是看工作的完成过程中,是否出现一项任务等待另一项任务完成的情况。

不区分是描述“进程”还是“线程”、适用线程和进程,因此可以使用“任务”这个更高的层次来概括。本质来说这是对计算机世界或现实世界的某种行为的抽象描述。

2.1 同步

假设有一辆公交车记为A,并且只有一个门记为A.door-1,那么车上的乘客B和车站的乘客C上下车,只能是顺序执行的,即B先下C后上,或者是C先上B后下。

在这里插入图片描述

为了完成一项工作,需要完成若A、B、C任务,并且这些任务只能顺序执行,即A->B->C。

2.2 异步

假设有一辆公交车记为A,并且只有两个门记为A.door-1,、A-door-2,那么车上的乘客B和车站的乘客C上下车,B可以从A.door-2下车,而不用等C上车后再下车。同理对于C来说可以从A.door.1上车,而不用等B下车后再上车。

在这里插入图片描述

为了完成一项工作,需要完成A、A-1、B、C任务,并且这些任务可以各自运行,一个任务不用等另一个任务,如下所示:

在这里插入图片描述

三、并发与并行

不区分是描述“进程”还是“线程”、适用线程和进程,因此可以使用“任务”这个更高的层次来概括。本质来说这是对计算机世界或现实世界的某种行为的抽象描述。

3.1 并发

多个任务之间同时执行,需要在多核CPU中才能实现。

3.2 并行

各个任务之间交叉执行相同时间间隔,由于CPU的计算速度非常的快,所以让各个任务看起来好像是一起推进的,但是在微观上依旧是串行的。

3.3 单核CPU和多核CPU

3.3.1 单核CPU的实现多任务

只能采用并行模式来实现的。

3.3.2 多核CPU实现多任务

采用并发模式来实现。

3.4 并行和并发、同步和异步 & 线程和进程的关系

并发和并行同步和异步是对线程和进程的工作模式的描述。

四、参考文献

1、https://www.zhihu.com/question/33515481
2、https://www.cnblogs.com/wspblog/p/5948465.html
3、https://www.liaoxuefeng.com/wiki/1252599548343744/1304521607217185
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

操作系统中的线程&进程和同步&异步和并发&并行 的相关文章

  • touch命令在一个目录下创建多个文件(不同名称)

    我想制作一个在 bash 中创建目录和文件结构的脚本 我尝试过这样的事情 mkdir p 1 2 touch 1 2 a b c a b c 应该是在一个命令或其他命令中创建的文件 但由于某种原因 结构是这样的 current folder
  • 怎样才能使 Windows 成为一个开箱即用的 POSIX 兼容操作系统?

    这个问题的动机是我的一个牵强的梦想 即 nix 平台上可用的许多优秀软件可以轻松移植到 Windows 微软最近对开源和开放性采取了不同的方法 所以我真的很想知道如果微软有这样的倾向 这样的事情会有多可行 我很好奇的一些更具体的事情是 是否
  • 如何在我的 AWS EC2 实例上安装特定字体?

    我有一个在 AWS EC2 Amazon Linux Elastic Beanstalk 实例上运行的 Python 应用程序 该实例需要某些特定字体才能生成输出 并且想知道如何在部署或实例启动过程中安装它们 我的代码在本地计算机 OS X
  • 伊迪德信息

    重新定义问题 有什么方法可以获取所连接显示器的序列号吗 我想收集显示器的Eid信息 当我使用 logverbose 选项运行 X 时 我可以从 xorg 0 log 文件中获取它 但问题是 如果我切换显示器 拔出当前显示器 然后插入另一个显
  • 在 LINUX 上使用 Python 连接到 OLAP 多维数据集

    我知道如何在 Windows 上使用 Python 连接到 MS OLAP 多维数据集 嗯 至少有一种方法 通常我使用 win32py 包并调用 COM 对象进行连接 import win32com client connection wi
  • 为什么在 Linux 上字符串文字的内存地址与其他字符串文字的内存地址如此不同?

    我注意到字符串文字在内存中的地址与其他常量和变量 Linux 操作系统 非常不同 它们有许多前导零 未打印 Example const char h Hi int i 1 printf p n void h printf p n void
  • 为 Qt 应用程序创建 Linux 安装

    我刚刚用 Qt Creator 制作了一个很棒的程序 我对自己很满意 如何将其从台式机移至笔记本电脑 那么 最好的方法是安装程序 对吗 对于 Ubuntu 这是一个 Debian 软件包 对吗 我怎么做 有人这样做过吗 他们可以分享 QT
  • 每个进程每个线程的时间量

    我有一个关于 Windows 和 Linux 中进程和线程的时间量子的问题 我知道操作系统通常为每个线程提供固定的时间量 我知道时间量根据前台或后台线程而变化 也可能根据进程的优先级而变化 每个进程有固定的时间量吗 例如 如果操作系统为每个
  • sleep 0 有特殊含义吗?

    我看到很多用法sleep 0在我的一个客户项目中 代码看起来像这样 while true sleep 0 end 阅读一些像这样的答案this https stackoverflow com questions 3727420 signif
  • 如何查找连接到 AF_INET 套接字的客户端的 UID?

    有什么方法或类似的东西ucred for AF UNIX如果是AF INET插座 TCP在我的例子中 找出连接到我的套接字的客户端的UID 还有 proc net tcp但它显示了UID of the creator插座的而不是连接的cli
  • Docker:处理 tar 文件时出错(退出状态 1):设置枢轴目录时出错:不是目录

    我是 Docker 新手 不知道是什么原因导致此错误或如何诊断它 任何有关此问题的具体帮助或有关首先检查何处以诊断此类问题的提示将不胜感激 我的 Dockerfile FROM java 8 Install maven RUN apt ge
  • Linux 桌面快捷方式和安装图标

    我需要添加什么到我的 spec文件来创建桌面快捷方式并在安装过程中为快捷方式分配一个图标 rpm 如果需要脚本 一个示例将非常有帮助 您在 Linux 下使用 desktop 文件作为图标 图标放置的位置取决于您使用的发行版和桌面环境 由于
  • 设置 Apache POI 的路径

    我想创建 Excel 文件并使用 java 程序在该文件中写入数据 That is here http www techbrainwave com p 554我在 java 文件所在的位置提取了 Apache POI 并将该路径包含在路径变
  • GCC 和 ld 找不到导出的符号...但它们在那里

    我有一个 C 库和一个 C 应用程序 尝试使用从该库导出的函数和类 该库构建良好 应用程序可以编译 但无法链接 我得到的错误遵循以下形式 app source file cpp text 0x2fdb 对 lib namespace Get
  • PHP 致命错误:未找到“MongoClient”类

    我有一个使用 Apache 的网站 代码如下 当我尝试访问它时 我在 error log 中收到错误 PHP Fatal Error Class MongoClient not found 以下是可能错误的设置 但我认为没有错误 php i
  • 如何模拟ARM处理器运行环境并加载Linux内核模块?

    我尝试加载我的vmlinux into gdb并使用 ARM 内核模拟器 但我不明白为什么我会得到Undefined target command sim 这是外壳输出 arm eabi gdb vmlinux GNU gdb GDB 7
  • 在 Linux 中禁用历史记录 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 要在 Linux 环境中禁用历史记录 我执行了以下命令 export HISTFILESIZE 0 export HISTSIZE 0 u
  • QFileDialog::getSaveFileName 和默认的 selectedFilter

    我有 getSaveFileName 和一些过滤器 我希望当用户打开 保存 对话框时选择其中之一 Qt 文档说明如下 可以通过将 selectedFilter 设置为所需的值来选择默认过滤器 我尝试以下变体 QString selFilte
  • 修改linux下的路径

    虽然我认为我已经接近 Linux 专业人士 但显然我仍然是一个初学者 当我登录服务器时 我需要使用最新版本的R 统计软件 R 安装在 2 个地方 当我运行以下命令时 which R I get usr bin R 进而 R version
  • 创建 jar 文件 - 保留文件权限

    我想知道如何创建一个保留其内容的文件权限的 jar 文件 我将源代码和可执行文件打包在一个 jar 文件中 该文件将在使用前提取 人们应该能够通过运行批处理 shell 脚本文件立即运行示例和演示 然后他们应该能够修改源代码并重新编译所有内

随机推荐

  • Postgresql vacuum 和 vacuum full

    转载自 https www modb pro db 63663 dead tuples tuple 元组 也就是一行数据 首先 简要解释什么是 死元组 和 膨胀 当您在PostgreSQL中执行DELETE时 行不会立即从数据文件中删除 而
  • 11.面向对象概述,类的创建,对象的创建

    一 面向对象程序设计概述 1 知识点面向对象程序设计的目的 1 从程序设计的角度来看 事物的属性就可以用变量来表示 行为则可以用方法来反映 2 客观世界中事物的属性和行为可以进行传递 当某一个事物得到另一个事物传给它的属性和行为 我们就说该
  • 证书 vivo_vivo官宣首款商用5G手机iQOO Pro,8月上市

    环球网科技综合报道 7月30日 vivo子品牌iQOO通过官微宣布支持5G网络的iQOO Pro将于8月发布 即vivo首款商用5G手机将是iQOO Pro iQOO自发布之初便备受关注 首款产品以游戏手机的定位切入市场对当时首批商用高通骁
  • 优雅,在SpringBoot项目中一键轻松接入ChartGPT

    最近体验了火爆全网的 ChartGPT 深刻体会了其强大的能力 这让我们程序猿对AI的未来突然有了广大的畅想空间 我也在网上看到不少大牛通过 ChartGPT 来获取收益 就寻思着能否自己接入 ChartGPT 的 API 来做些什么事情
  • Linux宝塔面板命令大全,快速学会

    cd www server panel python tools py panel 123456 查看宝塔日志 cat tmp panelBoot pl 查看软件安装日志 cat tmp panelExec log 站点配置文件位置 www
  • AppsFlyer 研究(三)OneLink平台归因、跳转、深度链接

    一 OneLink 简介 OneLink是AppsFlyer的对平台归因 跳转和深度链接的解决方案 OneLink在设备点击时检测到设备类型 并将用户重定向到匹配的目的地 例如Google Play商店 iOS应用商店 第三方应用商店 或者
  • "我为区块链赋能实体经济代言"第二批代言人:复旦大学张江研究院教授陈文君

    我为区块链赋能实体经济代言 推出以来 颇受行业关注 为进一步规范行业发展 落实区块链赋能实体经济的目标 为行业发展 正本清源而发声 新一轮的 我为区块链赋能实体经济代言 于9月3日重磅启动 我为区块链赋能实体经济代言100人第二批 第3位代
  • JPEG编码原理与解码分析

    JPEG编码原理 JPEG Joint Photographic Experts Group 是JPEG标准的产物 该标准由国际标准化组织 ISO 制订 是面向连续色调静止图像的一种压缩标准 JPEG格式是最常用的图像文件格式 后缀名为 j
  • 数据挖掘—数据预处理

    文章目录 数据预处理 1 数据清洗 缺失值处理 异常值处理 2 数据集成 实体识别 冗余属性识别 数据变换 简单函数变换 规范化 连续属性离散化 属性构造 3 数据规约 属性归约 数值归约 Python主要数据预处理函数 数据预处理 数据预
  • 【uniapp】使用canvas组件编译到微信小程序兼容出错问题

    使用uniapp编译跨平台项目会遇到不少兼容问题 这里主要讲canvas组件的 编译到微信小程序会有兼容出错问题 这里给讲一下解决方案 希望有帮助 常见问题 draw无法绘制图形 如果使用CanvasContext绘制 以下代码 编译到微信
  • 值得收藏的UmiJS 教程

    点击上方关注 前端技术江湖 一起学习 天天进步 前言 网上的umi教程是真的少 很多人都只写了一点点 很多水文 所以打算自己写一篇 自己搭建umi 并封装了一下常用的功能 并用到公司实际项目中 umi介绍 Umi 是什么 Umi 中文可发音
  • maven学习笔记 maven的使用

    新建maven项目 使用mvn archetype generate命令新建一个maven项目 maven会自动下载必要的插件 还会下载一个所有项目模板的分类文件 这个文件有好几兆的大小 因此可能会持续比较长的时间 下载完毕之后 就会列出所
  • JAVA 8 新特性及使用

    1 前言 2019年9月19日java13已正式发布 感叹java社区强大 经久不衰 由于国内偏保守 新东西总要放一放 让其他人踩踩坑 等稳定了才会去用 并且企业目的还是赚钱 更不会因为一个新特性去重构代码 再开发一套程序出来 甚者国内大多
  • 不一样的联宇益通,不一样的SD-WAN+

    点击上方 中国云报 可关注 笔者有点挠头 究竟该用哪个词来描述联宇益通 Netpas 公司呢 低调 技术控 特立独行 还是自得其乐 似乎都有些影子 但又都不是最准确的表达 与联宇益通创始人兼CEO谢毅斌聊得越深入 感觉联宇益通身上矛盾的地方
  • 软件测试 app自动化02 Appium常用的元素定位工具 元素的属性 元素定位方法

    文章目录 1 Appium常用的元素定位工具 1 1 uiautomatorviewer 1 2 Appium Inspector 1 3 Weditor 2 元素的属性 3 元素定位方法 小结 1 Appium常用的元素定位工具 1 1
  • 数据库学习笔记(8)——mysql中的函数和存储过程

    1 MySQL中的函数 1 数据库主要做存储和查询操作 逻辑操作一般不在数据库中进行操作 2 MySQL中的函数主要是自定义函数 其中自定义函数格式如下 修改语句结束符 delimiter create function 函数名 参数名 数
  • 操作系统常见面试题

    1 什么是进程 Process 和线程 Thread 有何区别 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动 进程是系统进行资源分配和调度的一个独立单位 线程是进程的一个实体 是CPU调度和分派的基本单位 它是比进程更小的能
  • java-线程锁

    实现锁 1 同步代码块 2 同步方法 在方法的头部加上synchronized 3 Lock 功能比synchronized更加的强大 但是加锁的时一定不要忘记解锁unlock 在使用lock锁时 想要实现睡眠唤醒功能 就要使用condit
  • 决策报表---动态参数实现多级下拉折叠菜单

    1 描述 在报表开发中 我们会遇到报表需要对行标题实现展开收起的折叠菜单的效果 这种效果一般在分析预览或者填报中应用下拉树控件来实现 但是在分页预览或者决策报表如何实现呢 这里我们使用动态参数的方式 预期效果 1 在分页预览和决策报表中能适
  • 操作系统中的线程&进程和同步&异步和并发&并行

    操作系统中的线程 进程和同步 异步和并发 并行 一 进程和线程 1 1 进程 1 2 线程 1 3 实现多任务的方法 1 3 1 使用多进程实现多任务 1 3 2 使用多线程 单个进程包含多个线程 实现多任务 1 3 3 使用多进程 多进程