【并发小知识】

计算机五大组成部分


控制器

运算器

存储器

输入设备

输出设备

计算机的核心真正干活的是CPU(控制器+运算器=中央处理器)

  • 程序要想计算机运行,它的代码必须要先由硬盘读到内存,之后cpu取指再执行

操作系统发展史


穿孔卡片处理系统:一个人占一个机房,输入卡片

联机批处理系统:(磁带)节省插入卡片的等待的时间,提升了CPU处理时间。

脱机批处理系统:输入机(硬盘) --> 卫星机 --> 高速磁带(内存)—> 主机,CPU运行的速度是非常快的,而数据从硬盘读取到内存速度相对来说是非常慢的。

多道技术


单核实现并发的效果

必备知识点
  • 并发

    看起来像同时运行的就可以称之为并发

  • 并行

    真正意义生的同时执行

ps:

  • 并行肯定算并发
  • 单核的计算机肯定不能实现并行,但是可以实现并发!!!

补充:我们直接假设单核就是一个核,干活的就是一个人。

多道技术图解

节省了多个程序运行的总耗时

  • 单道(串行)

    任务A: 输入过程 - 执行过程 - 输出过程 - 任务B:输入过程 - 执行过程 - 输出过程

  • 多道(在执行任务A的时候控制硬盘将任务B提前读取到内存) 时间线短了,节省了时间

    任务A输入过程 ----- 执行过程 ----- 输出过程

​ 任务B输入过程 -----执行过程 ------输出过程

多道技术重点知识

空间上的复用与时间上的复用

  • 空间上的复用

    多个程序公用一套计算机硬件

  • 时间上的复用

    例子:洗衣服30s, 做饭50s, 烧水30s

    切换+保存状态

    """
    切换(cpu)分为两种情况1.当一个程序遇到 IO操作时候,操作系统会剥夺该程序的cpu执行权限.作用:提高了cpu的利用率,并且也不影响程序的执行效率2.当一个程序长时间占用cup的时候,操作系统也会剥夺该程序的cpu执行权限.作用:降低了程序的执行效率(原本时间+切换时间)
    """
    

进程理论


必备知识点

程序与进程的区别

"""
程序就是一堆躺在硬盘上的代码,是"死"的
进程则表达程序正在执行的过程,是"活"的
"""
进程调度
  • 选来先服务调度算法

    """对长作业有利,对短作业无利"""
    
  • 短作业优先调度算法

    """对短作业有利,对长作业无利"""
    
  • 时间片轮转法+多级反馈队列

    """"
    时间片:将固定的时间切分成N多份,每一份就表示一个时间片
    越往下说明该任务需要的时间越长
    越往下任务的执行优先级越低(当第一队里中出现了新的任务,cpu会立刻停止当前任务,去执行新添加进来的第一层队列中的任务)在Linux中可以给任务设置优先级,一次性分配好几个时间片(了解)
    """"
    
    进程运行的三状转换图

    所有的程序要想被执行必须先经历就绪状态

    image-20240528144525897
两对重要概念
  • 同步和异步

    """描述的是任务的提交方式"""
    同步:任务提交之后,原地等待任务的返回结果,等待的过程中不做任何事(干等)程序层面上表现出来的感觉就是卡住了异步:任务提交之后,不原地等待任务的返回结果,直接去做其他事情我提交的任务结果如何获取?任务的返回结果会有一个异步回调机制自动处理
    
  • 阻塞非阻塞

    """描述的程序的运行状态"""
    阻塞:阻塞态
    非阻塞:就绪态, 运行态

    上述概念的组合:最高效的一种组合就是异步非阻塞

开启进程的两种方式


定心丸:代码开启进程和线程方式,代码书写基本是一样的.

join方法
from multiprocessing import Process
import timedef task(name,n):print('%s is running' % name)time.sleep(n)print('%s is over' % name)if __name__ == '__main__':# 1.创建一个对象# p1 = Process(target=task, args=('jason', 1))# p2 = Process(target=task, args=('egon', 2))# p3 = Process(target=task, args=('tank', 3))# # 2.开启进程# start_time = time.time()# p1.start()  # 告诉操作系统帮你创建一个进程# p2.start()# p3.start()# p1.join()# p2.join()# p3.join()# print('主',time.time() - start_time)start_time = time.time()p_list = []for i in range(1,4):p = Process(target=task, args=('%s' % i, i))p.start()p_list.append(p)for i in p_list:p.join()print('主', time.time() - start_time)"""
windows操作系统下,创建进程一定要在main内创建
因为Windows下创建进程类似于模块导入方式
会从上往下依次执行代码
linux中则是直接将代码完整的拷贝一份
"""
进程间数据相互隔离
from multiprocessing import Processmoney = 100def task():global money  # 局部修改全局money = 666print('子', money)if __name__ == '__main__':p = Process(target=task)p.start()p.join()print(money)

昨日回顾


  • 操作系统的发展史

    """其实主要就是围绕cpu的利用率问题"""
    
  • 多道技术

    """
    单核实现并发的效果并发:看起来像是同时运行的就可以叫做并发
    并行:真正意义上的同时运行空间和时间上的复用	空间上多个程序公用一套计算机硬件时间上切换+保存状态
    """
    # 切换分为两种
    # 1.当一个程序遇到IO操作,操作系统会立刻剥夺该程序的执行权限(提高了cpu的利用率,并且不影响程序的执行效果)
    # 2.当一个程序长时间占用cpu,操作系统会立刻剥夺该程序的执行权限(降低了程序的运行效率,但是玩出了并发的效果)
    
  • 进程

    """
    程序:就是一堆死代码
    进程:程序正在执行的过程
    """# 进程的调度算法
    """
    先来先服务调度算法
    短作业优先调度算法
    时间片轮转法+多级反馈队列
    """
    
  • 进程运行的三状态图

    """
    就绪态:一切程序必须要先经过就绪态,才能进入运行态
    运行态:正在被cpu执行
    阻塞态:程序遇到IO操作了理想:我们希望我们开发的程序一直处于就绪态和运行态之间
    """
    
  • 两对重要概念

    • 同步与异步

      """任务的提交方式"""
      同步任务提交之后原地等待返回结果期间不做任何事情
      异步任务提交之后不原地等待返回结果执行下一行代码结果由异步回调机制做处理
      
    • 阻塞与非阻塞

      """程序运行的状态"""
      阻塞:阻塞态
      非阻塞:就绪态, 运行态
      

      上面的两对概念通常组合出现,但是最常用的就是异步非阻塞

  • 开启进程的两种方式

    """参考之前的代码"""
    
  • join方法

    """主进程等待子进程代码运行完毕后再往下执行代码"""
    
  • 进程间数据是相互隔离的

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

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

相关文章

学习java第七十九天

AOP有两种实现方式:静态代理和动态代理。 静态代理 静态代理:代理类在编译阶段生成,在编译阶段将通知织入Java字节码中,也称编译时增强。AspectJ使用的是静态代理。 缺点:代理对象需要与目标对象实现一样的接口&#x…

Android Studio 中gradle的bin和all区别

1.在android studio中设置安装gradle时,真各种版本看到眼花缭乱,还有疑惑gradle-*.*-all.zip与gradle-*.*-bin.zip的区别是什么。下面解压如下: bin: all: 其实,用bin就可以了,all文件就是多了docs(文档)和src(源码)两…

选择源代码防泄漏方案需要考虑哪些因素?

选择加密软件是确保公司数据安全和保护知识产权的重要决策。 选择合适的加密软件:关键因素与推荐方案 一、稳定性:加密软件的核心 稳定性是评估加密软件的首要因素,它直接关系到企业数据的安全性和业务的连续性。 避免文件损坏&#xff1…

Java基础——Optional

Optional 类主要解决的问题是臭名昭著的空指针异常NPE(NullPointerException) 在 Java 8 之前,任何访问对象方法或属性的调用都可能导致 NullPointerException: String isocode user.getAddress().getCountry().getIsocode().to…

Linux网络-Socket套接字_Windows与Linux端双平台基于Udp传输协议进行多线程跨平台的服务器与客户端网络通信的简易聊天室实现

文章目录 一、Socket套接字二、socket 常见API1. int socket(int domain, int type, int protocol);2. int bind(int socket, const struct sockaddr *address, socklen_t address_len);struct sockaddr 3. ssize_t recvfrom(int socket, void *restrict buffer, size_t length…

go defer

type _defer struct {siz int32started boolopenDefer boolsp uintptrpc uintptrfn *funcval_panic *_paniclink *_defer }runtime._defer 结构体是延迟调用链表上的一个元素,所有的结构体都会通过 link 字段串联成链表。 只…

【全开源】酒店订单管理系统源码(FastAdmin+ThinkPHP)

一款基于FastAdminThinkPHP开发的旨在为民宿、酒店、宾馆等提供房态、订单、财务、客史等数据化、信息化的智慧管理工具,实现一站式订房管理,帮助酒店、民宿、宾馆提升管理效率,降低管理成本,提升行业竞争力。 打造高效、便捷的酒…

Generate Anything Anywhere in Any Scene #论文阅读

URL https://arxiv.org/pdf/2306.17154 TD;DR 2023 年 6 月 Wisconsin 的文章。围绕 ip 保持做的扩展任务,核心目标是对指定 ip 可以生成任意大小的(指定 ip)、任意背景的图片,同时可以通过 bbox 控制物体位置和多物体生成。主…

SOLIDWORKS教育版代理商应该如何选择?

SOLIDWORKS作为目前流行的三维设计软件在工程设计,制造和建筑中有着广泛的应用前景。教育版SOLIDWORKS软件是学生及教育机构学习教学的理想平台。 下面介绍几个挑选SOLIDWORKS教育版代理的关键要素: 1、专业知识与经验:代理商应掌握SOLIDWORKS等软件的丰…

SCP‘s Story(2)

杰克古迪知道很多事情,但不包括内疚和痛苦。然而,他感觉到了,就像苦艾在他心里扎了根。 风把树叶从树上刮下来,把树叶吹得快要断了,也把他吹得差不多了。空气中弥漫着一种病态的感觉。天空中没有鸟;天空看起来太不友好…

ResNet残差网络的学习【概念+翻译】

基于何明凯前辈论文的学习 1.主要内容(背景) 1、首先提了一个base:神经网络的深度越深,越难以训练。 2、原因:因为随着神经网络层数的增加,通常会遇到梯度消失或梯度爆炸等问题,这会导致训练变…

2024 全新 Javascript 面试题目进阶篇

昨天,咱们介绍了关于Javascript面试篇的基础篇。今天,让我们来看看进阶篇都有什么。 12. 闭包是什么?闭包的使用场景有哪些? 闭包 是一种特性,它使得函数能够捕获其定义时的环境(或者说保留对外部作用域变…

gem5模拟器入门(三)——在配置脚本中添加Cache

使用gem5模拟器入门(二)——创建一个简单的配置脚本-CSDN博客配置脚本作为起点,本章将介绍一个更复杂的配置。我们将向系统添加一个缓存层次结构,如下图所示。此外,本章还将介绍如何理解gem5的统计输出,并向您的脚本添加命令行参数。 1.创建Cache对象 我们将使用经典的缓…

Robot Framework自动化测试基础入门

1、什么是Robot Framework Robot Framework是一个基于Python的关键字驱动的自动化测试框架。以下是关于Robot Framework的几个特点: 基于关键字驱动: 它允许测试人员使用Python封装关键字,这些关键字可以在非编码环境下被用来构建可执行的测试用例。易于扩展: 作为一个开源工…

20240528解决飞凌的OK3588-C的核心板的TYPE-C1接口识别问题

20240528解决飞凌的OK3588-C的核心板的TYPE-C1接口识别问题 2024/5/28 16:46 缘起: 现阶段碰到的USB相关的问题:(LINUX R4版本) 1、USB3.0插USB摄像头 lsusb找不到设备 2、刷机口只接了3根线,GND/D/D-,可以…

2024HBCPC:E Breakfast II

题目描述 作为一个合格的大学生,你不仅需要学习成绩好,还需要会买包子和鸡蛋。 今天,又轮到你们给你的导师买早饭了! 这一次你们一共需要给导师买 n n n 个包子和 m m m 个鸡蛋(请注意,这一次可能不再只…

搭贝财务管理助您轻松掌控财务大局

在当今竞争激烈的商业环境中,有效的财务管理是企业成功的关键之一。搭贝财务管理平台为您提供了一揽子解决方案,助您轻松掌握财务大局,实现财务管控的全面数字化。 📈 基础信息管理 搭贝财务管理平台首先提供了完善的基础信息管理…

3D开发工具HOOPS在BIM系统中的应用

建筑信息模型是一种革命性的建筑设计、施工和管理方法。它通过创建和利用数字信息来优化建筑项目的设计、施工和运营过程。在这个过程中,3D开发工具HOOPS扮演着至关重要的角色,为BIM系统提供了强大的技术支持和丰富的功能。HOOPS中文网http://techsoft3d…

RAG架构的数据准备流程

虽然现成的大型语言模型 (LLM) 功能强大,但企业发现,根据其专有数据定制 LLM 可以释放更大的潜力。检索增强生成 (RAG) 已成为这种定制的主要方法之一。RAG 模型将大型语言模型强大的语言理解能力与检索组件相结合,使其能够从外部数据源收集相…

5V升压充电8.4V芯片4A输出电流-AH3330

AH3330-5V升压充电8.4V芯片,采用SSOP-10封装,配备外挂的MOS管,可支持4.5V到32V的输入电压范围,输出功率高达40W。该芯片广泛应用于多节电池充电控制领域,尤其适用于锂电池、磷酸铁锂电池和铅酸电池等不同类型的充电控制…