并发编程基础概念

相关概念

并行

并行是指同一个时刻,多个任务同时进行。只有在多核CPU下才会发生。

并发

并发是指单个CPU在不同任务之间来换切换工作,但是同一时刻只有一个任务在工作。由于CPU的切换速度很快,给人的感受是多个任务在一起运行。

串行

串行是指单个CPU根据任务队列顺序执行任务,只有前面的任务完成后才会执行后面的任务。

进程

进程是程序在计算机中运行的具体实现。进程一般由程序段数据集控制块组成。

  • 程序段是指任务的指令集
  • 数据集是指任务执行过程中需要的变量,函数,类等数据
  • 控制块是记录CPU处理任务时用到的控制模块

在操作系统中进程使用pid(process identification)表示。pid由进程创建时,操作系统分配得到。并且在进程运行过程中pid不会发生改变。

 import os​# 获取当前进程的pidprint(os.getpid())# 获取当前进程的父进程pidprint(os.getppid())

线程

进程内的一个任务执行的独立单元,是任务调度和系统执行的最小单位。

协程

用户态的轻量级线程,协程的调度完全由用户控制,主要为单线程下模拟多线程。

一个程序可以由一到多个进程,一个进程可以有一到多个线程,一个线程下可以有一到多个协程。

进程状态

在操作系统创建进程,到销毁进程的过程中,进程一般存在三个状态就绪运行阻塞

  • 就绪:进程获取了除CPU外的及其资源,一旦获取CPU资源就可以工作的状态
  • 运行:CPU在工作,且进程工作的状态
  • 阻塞:CPU没有工作,且进程工作的状态,往往是在执行IO操作

同步/异步

同步和异步是多任务处理过程中的不同方式或手段。

同步

同步就是多任务发生时,系统按照任务顺序依次执行,只有前面的任务结束后,才会执行后面的任务。

异步

异步就是多任务发生时,系统会以并行或并发的方式处理多任务,让多任务之间不必相关等待。

案例说明

同步:某人去商场购买洗衣机然后回家做饭。她必须要等商场配好洗衣机后,然后带着洗衣机,回家做饭。

异步:某人去商场相中洗衣机后,网上下单,然后回家做饭。此时她不需要等待商场配好洗衣机后才回家,网上下单后就可以直接回家了。

阻塞/非阻塞

阻塞和非阻塞是进程处于阻塞状态时,CPU的工作方式。

阻塞

当任务处于阻塞时,CPU处于等待状态,不能处理其他任务。

非阻塞

当任务处于阻塞时,CPU不必等待,能够处理其他任务。

同步阻塞

当系统以同步方式处理多任务时,如果任务A发生了阻塞状态,则任务A后面的所有任务都必须要等待任务A结束阻塞状态,且完成后才能执行。

 import time​​def taska():print("task a started")time.sleep(5)print("task a ended")​​def taskb():print("task b started")time.sleep(5)print("task b ended")​​if __name__ == "__main__":queue = [taska, taskb]for task in queue:task()

异步阻塞

当系统以异步方式处理多任务时,如果任务A发生阻塞状态,系统需要等待,而不会切换至其他任务进行处理。

 """@Time: 2024/6/28 20:18@Author: 'Ethan'@Email: ethanzhou4406@outlook.com@File: 1. 同步阻塞.py@Project: python@Feature:"""import timeimport multiprocessing​​def taska():print("task a started")time.sleep(5)print("task a ended")​​def taskb():print("task b started")time.sleep(5)print("task b ended")​def taskc():print("task c started")time.sleep(5)print("task c ended")​if __name__ == "__main__":processa = multiprocessing.Process(target=taska)processb = multiprocessing.Process(target=taskb)processc = multiprocessing.Process(target=taskc)queue = [processa, processb, processc]for process in queue:process.start()process.join() # 阻塞​

同步非阻塞

当系统以同步方式处理多任务时,如果前面的任务A出现阻塞状态,则后面的任务B不必等待,直接运行。

异步非阻塞

当系统以异步方式处理多任务时,如果前面的任务A出现阻塞状态,则不需等待切换至任务B运行。

 """@Time: 2024/6/28 20:18@Author: 'Ethan'@Email: ethanzhou4406@outlook.com@File: 1. 同步阻塞.py@Project: python@Feature:"""import timeimport multiprocessing​​def taska():print("task a started")time.sleep(5)print("task a ended")​​def taskb():print("task b started")time.sleep(5)print("task b ended")​def taskc():print("task c started")time.sleep(5)print("task c ended")​if __name__ == "__main__":processa = multiprocessing.Process(target=taska)processb = multiprocessing.Process(target=taskb)processc = multiprocessing.Process(target=taskc)queue = [processa, processb, processc]for process in queue:process.start()

发布于 2024-06-28 21:30・IP 属地江苏

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

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

相关文章

一年前 LLM AGI 碎片化思考与回顾系列⑧ · 穿越SystemⅡ未知之境

阅读提示: 本篇系列内容的是建立于自己过去一年在以LLM为代表的AIGC快速发展浪潮中结合学术界与产业界创新与进展的一些碎片化思考并记录最终沉淀完成,在内容上,与不久前刚刚完稿的那篇10万字文章 「融合RL与LLM思想,探寻世界模型…

期末C语言易错知识点整理

1.在定义多维数组时,除了最左边的维度,其余的维度必须明确指定大小 2.int m[1][4]{4}; 定义的是一个 1 行 4 列的二维数组,初始化时提供了一个元素 4,其余元素默认初始化为 0,因此是正确的。 3.二维数组 a[3][6] 中的索…

PKG打包sqlite3项目,如何添加node_sqlite3.node依赖

项目地址:https://github.com/helson-lin/pkg_sqlite 在ffandown项目内,由于项目使用了sqlite3,在跨平台打包的时候,除了本机外其他平台打包之后运行缺少node_sqlite3.node依赖。 为了解决问题,百度了很久&#xff0c…

分享一个导出数据到 Excel 的解决方案

前言 许多业务场景下需要处理和分析大量的数据,而 Excel 是广泛使用的文件格式,几乎所有人都能打开和查看 Excel 文件,因此将数据库中的原始数据处理后,导出到 Excel 是一个很常见的功能,对于数据管理、分析、备份、展…

【代码随想录】【算法训练营】【第45天】 [198]打家劫舍 [213]打家劫舍II [337]打家劫舍III

前言 思路及算法思维,指路 代码随想录。 题目来自 LeetCode。 day 45,周五,坚持不了一点~ 题目详情 [198] 打家劫舍 题目描述 198 打家劫舍 解题思路 前提:相邻两房屋不能连续盗窃 思路:动态规划, dp[i]: [0,…

【C语言】--操作符详解

🌭个人主页: 起名字真南 🍿个人专栏:【数据结构初阶】 【C语言】 目录 1 算术操作符1.1 和 -1.2 *1.3 /1.4 % 2 赋值操作符 :2.1 复合赋值符 3 单目操作符3.1 和- - 4 强制类型转换5 printf 和 scanf5.1 printf5.1.1 基本用法5.1.2 占位符5.…

Navicat连接Oracle出现Oracle library is not loaded的解决方法

目录 1. 问题所示2. 原理分析3. 解决方法1. 问题所示 使用Navicat链接Oracle的时候,出现如下提示:Oracle library is not loaded. 截图如下所示: 2. 原理分析 通常是由于缺少必需的 Oracle 客户端库或环境变量未正确配置所致 还有一种情况是 32位与64位的不匹配:Navica…

【数据可视化技术】1、如何使用Matplotlib和Seaborn库在Python中绘制热力图

热力图是一种数据可视化技术,可以显示变量之间的相关性。这个代码段是数据分析和可视化的常用方法,特别适合于展示变量之间的相关性,对于数据科学和机器学习项目非常有帮助。 1、 导入必要的库 首先,确保你已经安装了matplotlib…

javaSE知识点整理总结(上)

目录 一、面向对象 1. 类、对象、方法 2.面向对象三大特征 (1)封装 (2)继承 (3)多态 二、常用类 1.Object类 2.Array类 3.基本数据类型包装类 4.String类 5.StringBuffer类 6.Math类 7.Random…

WAIC2024 | 华院计算邀您共赴2024年世界人工智能大会,见证未来科技革新

在智能时代的浪潮汹涌澎湃之际,算法已成为推动社会进步的核心力量。作为中国认知智能技术的领军企业,华院计算在人工智能的广阔天地中,不断探索、创新,致力于将算法的潜力发挥到极致。在过去的时日里,华院计算不断探索…

Mac可以读取NTFS吗 Mac NTFS软件哪个好 mac ntfs读写工具免费

在跨操作系统环境下使用外部存储设备时,特别是当Windows系统的U盘被连接到Mac电脑时,常常会遇到文件系统兼容性的问题。由于Mac OS原生并不完全支持对NTFS格式磁盘的读写操作,导致用户无法直接在Mac上向NTFS格式的U盘或硬盘写入数据。下面我们…

SpringBoot:使用Spring Batch实现批处理任务

引言 在企业级应用中,批处理任务是不可或缺的一部分。它们通常用于处理大量数据,如数据迁移、数据清洗、生成报告等。Spring Batch是Spring框架的一部分,专为批处理任务设计,提供了简化的配置和强大的功能。本文将介绍如何使用Spr…

排序(冒泡排序、选择排序、插入排序、希尔排序)-->深度剖析(一)

欢迎来到我的Blog,点击关注哦💕 前言 排序是一种基本的数据处理操作,它涉及将一系列项目重新排列,以便按照指定的标准(通常是数值大小)进行排序。在C语言中,排序算法是用来对元素进行排序的一系…

【高性能服务器】服务器概述

🔥博客主页: 我要成为C领域大神🎥系列专栏:【C核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞👍收藏⭐评论✍️ 本博客致力于知识分享,与更多的人进行学习交流 ​ 服务器概述 服…

DDMA信号处理以及数据处理的流程---聚类

Hello,大家好,我是Xiaojie,好久不见,欢迎大家能够和Xiaojie一起学习毫米波雷达知识,Xiaojie准备连载一个系列的文章—DDMA信号处理以及数据处理的流程,本系列文章将从目标生成、信号仿真、测距、测速、cfar检测、测角、目标聚类、目标跟踪这几个模块逐步介绍,这个系列的…

静态链表详解(C语言版)

顺序表和链表的优缺点 顺序表和链表是两种基本的线性数据结构,它们各自有不同的优缺点,适用于不同的应用场景。 顺序表(Sequential List,通常指数组) 优点: 随机访问:可以通过索引快速访问任…

【技术追踪】UNest:一种用于非配对医学图像合成的新框架(MICCAI-2024)

前天看了一篇文章图像分割用diffusion,今天看了篇文章图像合成不用diffusion,你说说这~ 传送门:【技术追踪】SDSeg:医学图像的 Stable Diffusion 分割(MICCAI-2024) UNest:UNet结构的Transforme…

Java对象类辨识指南:Object与Objects类的区别详解

今天在写lambda表达式时,用filter来做过滤判断我的结果是否为null时使用到了Objects.nonNull,但是敲着敲着发现不对劲,怎么没有nonNull方法?? 其实时我少敲了一个s,当时自己并没有很清楚Object和Objects两者之前的区别&#xf…

Ansible-综合练习-生产案例

斌的招儿 网上教程大多都是官网模板化的教程和文档,这里小斌用自己实际生产环境使用的例子给大家做一个详解。涉及到一整套ansible的使用,对于roles的使用,也仅涉及到tasks和files目录,方便大家快速上手并规范化管理。 0.环境配置…

波音危机:星际客机飞船故障,宇航员被困太空!马斯克的SpaceX的“龙”飞船来救援?

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 在人类探索宇宙的漫漫征途中,波音公司的“星际客机”承载着无限的希望与梦想,却也面临着前所未有的挑战。从原计划的8天…