day36
今日内容概要
-
进程基础(操作系统中的概念)
-
进程调度算法(四种算法)
-
进程的并行和并发的概念
-
同步异步阻塞非阻塞的概念
-
创建进程(进程类Process)
-
Process类的参数
-
Process类的方法
-
如何开启多进程
-
基于TCP协议的高并发程序
进程基础
进程它是操作系统中最重要的概念,也是最基本的一个概念
线程也是操作系统中的一个很重要的概念
进程和线程都是有操作系统来调度使用的,我们程序员是不能控制的,这里就设计到调度算法
什么是进程?什么是线程?什么是程序?
进程和程序是两码事、完全不一样
程序:其实是一个死的东西、一堆代码就是程序,他也没有生命周期
进程:它是有生命周期的,这个任务做完,进程就不存在了
在一个进程中,可以有多个线程,一个进程中只有一个线程,也是可以的。
一个进程中至少要有一个线程
进程和线程他们都是有操作系统来调度的,程序员级别是没办法来调度的,协程就是程序员级别的,协程的调度它就是有我们程序员自己来调度的,在操作系统中是没有协程这个概念的,是我们人为的抽象出来的
进程》》》线程》》》协程
消耗资源对比:进程》》》线程》》》协程
单个cpu一次只能运行一个任务
进程调度算法
cpu的工作机制:
1.遇到I/O的时候,cpu会交出执行权限
2.当cpu遇到耗时比较长的时候,也会自动交出执行权限,切换到其他任务
I/O密集型
他会被时间所阻塞,不会占用大量的cpu资源,比如sleep(3)
计算机密集型
不占用大量的时候, 会占用大量的cpu资源,这种情况就是计算机密集型,没有时间的大量消耗
for i in range(10000000):i+=1
一、先来先服务调度算法
二、短作业优先调度算法
三、时间片轮转法
四、多级反馈队列
进程的并行和并发概念
并行:统一时刻同时运行
如果cpu是单核的,同一时刻能不能做到同时执行多个任务,不能
如果是多核,就可以同一时刻做到
核是2,最多同一时刻最多执行2个任务
核是4,同一时刻最多执行4个任务
并发:一段时间内看起来是同时运行
如果是单核的cpu,听课、看视频、浏览网页能不能一起操作,是可以的,cpu的切换达到的
同步 异步 阻塞和非阻塞
所谓同步,就是在发出一个*调用*时,在没有得到结果之前,该*调用*就不返回。但是一旦调用返回,就得到返回值了。
换句话说,就是由*调用者*主动等待这个*调用*的结果。
而异步则是相反,*调用*在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果。而是在*调用*发出后,*被调用者*通过状态、通知来通知调用者,或通过回调函数处理这个调用。
典型的异步编程模型比如Node.js
阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态.
阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。
非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程
如何创建进程
from multiprocessing import Process
def task():with open('a.txt','w',encoding='utf-8') as f:f.write('helloworld')if __name__ == '__main__': # windows平台上必须写在这个里面p = Process(target=task) # 实例出来一个进程类,让这个进程执行task任务p.start() # 真正的开始进程
process类参数
from multiprocessing import Processdef task(name, age, gender):print(name, age, gender)with open('a.txt', 'w', encoding='utf-8') as f:f.write('helloworld')"""现在这个写法还没有开启进程"""
"""Windows平台上必须写在这个里面"""
if __name__ == '__main__':"""group=None, target=None, name=None, args=(), kwargs={},*, daemon=None"""p = Process(target=task, name='process-2', args=(), kwargs={'name':'jerry', 'age':20, 'gender':'male'}) # 实例出来一个进程类, 让这个进程执行task任务p.start() # 真正的开启进程# 操作系统是负责把这个进程开起来# 开启一个进程来执行task任务,真正是谁在执行这个任务,是线程,进程里面至少要有一个线程"""进程的几个属性:1. 进程名 2. 进程号pid kill """# 如何查看进程的名称print(p.name) # Process-1# 怎么改进程名字# p.name = '这是新的进程名'# print(p.name) # 这是新的进程名
Process类的几个方法
from multiprocessing import Processimport time
def task(name, age, gender):print(name, age, gender)# with open('a.txt', 'w', encoding='utf-8') as f:# f.write('helloworld')time.sleep(3)print("子进程的代码")"""现在这个写法还没有开启进程"""
"""Windows平台上必须写在这个里面"""
if __name__ == '__main__':"""group=None, target=None, name=None, args=(), kwargs={},*, daemon=None"""# 子进程 主进程"""只是通知操作系统去开进程,并不是立马把进程开起来,他是需要消耗一定的时间的,侧面的反应了开启进程其实消耗很大"""p = Process(target=task, name='process-2', args=(), kwargs={'name':'jerry', 'age':20, 'gender':'male'}) # 实例出来一个进程类, 让这个进程执行task任务p.start() # 真正的开启进程# 操作系统是负责把这个进程开起来# 开启一个进程来执行task任务,真正是谁在执行这个任务,是线程,进程里面至少要有一个线程"""进程的几个属性:1. 进程名 2. 进程号pid kill """# 如何查看进程的名称# print(p.name) # Process-1# 怎么改进程名字# p.name = '这是新的进程名'# print(p.name) # 这是新的进程名## 如何查看进程号# print(p.pid) # process id# print(p.is_alive()) # True# p.terminate() # 杀死进程,结束任务# import time# time.sleep(1)# print(p.is_alive())p.join() # 等待子进程的代码全部执行完毕,在走主进程的print("主进程的代码执行完毕")
如何开启多进程
多进程就意味着可以同时做多个任务嘛, 一个进程做一个任务,多个进程肯定是做多个任务
from multiprocessing import Processimport time
def task(name):# print(name)# with open('a.txt', 'a', encoding='utf-8') as f:# f.write('helloworld')print("子进程")time.sleep(1)
if __name__ == '__main__':"""理论上你是可以一直开进程,单是你需要考虑资源的消耗情况"""start_time = time.time()ll = []for i in range(10):p=Process(target=task, kwargs={'name':'kevin'})p.start()# p.join() #ll.append(p)for j in ll:j.join()print("主进程, 总时间:", time.time() - start_time)
基于TCP协议的高并发程序
一个服务端不能够同时给多个客户端发送消息
import socket # python提供的socket模块def task(conn):while True:try:# 异常了一个bug,粘包现象data = conn.recv(1024) # 括号里面写的是接收的字节数,最多接收1024个字节if len(data) == 0:continueprint(data) # 还是bytes类型# 服务端开始给客户端也发送一个数据conn.send(data.upper())except Exception as e:print(e)breakconn.close()from multiprocessing import Processif __name__ == '__main__':# 1. 买手机# SOCK_STREAM ====> 代表的是TCP协议# socket.socket(socket.AF_INET, socket.SOCK_STREAM)# socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # udp协议server = socket.socket() # 默认是TCP协议# 2. 买手机卡# '0.0.0.0' =====> 代表允许任何的ip链接# server.bind(('0.0.0.0', 8000)) # 服务端绑定一个地址server.bind(('127.0.0.1', 8001)) # 服务端绑定一个地址# 3. 开机server.listen(1) # 监听,半连接池print('服务端正在准备接收客户端消息:')while True:conn, client_addr = server.accept() # 接收, 程序启动之后,会在accept这里夯住,阻塞p = Process(target=task, args=(conn,))p.start()
相关文章:
day36
今日内容概要 进程基础(操作系统中的概念) 进程调度算法(四种算法) 进程的并行和并发的概念 同步异步阻塞非阻塞的概念 创建进程(进程类Process) Process类的参数 Process类的方法 如何开启多进程 基于TCP协议的高并发程序 进程基础 进程它是操作系统中最重要的概念…...
五. 激光雷达建图和定位方案-开源SLAM
前面内容: 一. 器件选型心得(系统设计)--1_goldqiu的博客-CSDN博客 一. 器件选型心得(系统设计)--2_goldqiu的博客-CSDN博客 二. 多传感器时间同步方案(时序闭环)--1 三. 多传感器标定方案&a…...
SAP MM学习笔记37 - 请求书照合中的 追加请求/追加Credit 等概念/ 请求书的取消
有关请求书照合,之前学习了一部分,现在再来学其中的一些概念。 其实这些概念也许并不常用,但是你又不能不知道,因为客户会问。 有关请求书,贴一些以前学习的文章,以方便阅读。 SAP MM学习笔记33 - 请求书…...
【C#】Winform实现轮播图
复制后,需要修改的代码: 1、图片文件夹路劲:string folderPath "C:\\Users\\Administrator\\Desktop\\images"; 2、项目命名空间:namespace BuildAction 全窗口代码: using System; using System.Colle…...
MyBatisPlus(十九)自动填充
说明 自动填充指的是,当数据被 插入 或者 更新 的时候,会为指定字段进行一些默认的数据填充。 比如,插入时,会自动填充数据的创建时间和更新时间;更新时,会自动填充数据的更新时间。 实现方式 配置处理器…...
设计模式_命令模式
命令模式 介绍 定义案例问题堆积在哪里解决办法 行为形设计模式 就是把 “发布命令 执行命令”细化为多个角色 每个角色又能继续细化 发布命令 1 打印1-9 a 打印A-G 如果有更多的命令 命令处理方式更加多样性 更复杂 处理命令的顺序拆分角色:降低耦合度 命令类&am…...
python接口自动化测试(六)-unittest-单个用例管理
前面五节主要介绍了环境搭建和requests库的使用,可以使用这些进行接口请求的发送。但是如何管理接口案例?返回结果如何自动校验?这些内容光靠上面五节是不行的,因此从本节开始我们引入python单元测试框架 unittest,用它…...
tomcat 服务器
tomcat 服务器 tomcat: 是一个开源的web应用服务器。区别nginx,nginx主要处理静态页面,那么动态请求(连接数据库,动态页面)并不是nginx的长处,动态的请求会交给tomcat进行处理。 nginx-----转发动态请求-…...
如果你有一次自驾游的机会,你会如何准备?
常常想来一次说走就走的自驾游,但是光是想想就觉得麻烦的事情好多:漫长的公路缺少娱乐方式、偏僻拗口的景点地名难以导航、不熟悉的城市和道路容易违章…… 也因为如此,让我发现了HUAWEI HiCar这个驾驶人的宝藏! 用HUAWEI HiCar…...
关于ts的keyof
type props_type {name: string,age: number }const props: props_type {name: tjq,age: 18 }for (const key in props) { //props[key]出现红色波浪线const value props[key]; }why? 经过我查阅多方资料,在网上看到一个比较合适的例子 地址…...
Go实现CORS(跨域)
引言 很多时候,需要允许Web应用程序在不同域之间(跨域)实现共享资源。本文将简介跨域、CORS的概念,以及如何在Golang中如何实现CORS。 什么是跨域 如果两个 URL 的协议、端口(如果有指定的话)和主机都相…...
第一章:变量和简单的数据类型
第一节 变量 variable(变量),每个变量指向一个值————与该变量相关联的信息 message"hello python world!" print(message) 1.1变量的命名和使用 1.变量名只能包含数字(0~9)、字母(Aa~Zz)和下划线(_)。变量可以使用字母和下划线作为开头,…...
【初识Linux】:常见指令(2)
朋友们、伙计们,我们又见面了,本期来给大家解读一下有关Linux的基础知识点,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! C 语 言 专 栏:C语言:从入门到精通 数…...
“torch.load“中出现的“Unexpected key(s) in state_dict“报错问题
问题: 解决: 添加strictFalse,允许加载过程中出现不匹配的键。但请注意,仍然需要确保模型中的主要参数能够正确加载,以确保模型的有效性。 model.load_state_dict(state_dict) # 改为: model.load_state_dict(state…...
使用dasviewer加载osgb模型,不显示纹理,黑乎乎的怎么解决?
答:查看一下是不是点到快捷键切换成无纹理模式了。 DasViewer是由大势智慧自主研发的免费的实景三维模型浏览器,采用多细节层次模型逐步自适应加载技术,让用户在极低的电脑配置下,也能流畅的加载较大规模实景三维模型,提供方便快捷的数据浏览操作。#DasViewer##实景…...
Qtday01(qt简介、简单窗口组件)
今日任务 仿qq登录界面,QT实现 代码: 头文件: #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QLineEdit> #include <QLabel> #include <QPushButton> #include <QtDebug> #…...
【SA8295P 源码分析 (一)】41 - SA8295所有镜像位置、拷贝脚本、生成QFIL包 及 Fastboot 下载命令介绍
【SA8295P 源码分析】41 - SA8295所有镜像位置、拷贝脚本、生成QFIL包 及 Fastboot 下载命令介绍 一、SA8295 各镜像位置二、SA8295 QNX 侧镜像拷贝脚本三、SA8295 Android 侧镜像拷贝脚本四、使用QFIL 下载整包五、Fastboot 下载命令整理系列文章汇总见:《【SA8295P 源码分析…...
AtCoder abc130
F题提交了无数遍,最后发现是三分求解的写法错了 C - Rectangle Cutting 盲猜都在xy的中心点时可以无限分割,否则不能 D - Enough Array 前缀和二分求位置 E - Common Subsequence 公共子序列求有几种组合 设 d p [ i ] [ j ] dp[i][j] dp[i][j]代表s取到…...
数据库、数据中台、数据仓库、数据湖区别
数据时代,各行业的企业都已经开始通过数据库来沉淀数据,但是真的论起数据库、数据仓库、数据中台,还是新出现的数据湖,它们的概念和区别,可能知道的人就比较少了,今天我们详细来比较了解一下。 一、数据仓…...
缺失的数据范围,思维,hduoj
Problem Description 著名出题人小Q出过非常多的题目,在这个漫长的过程中他发现,确定题目的数据范围是非常痛苦的一件事。 每当思考完一道题目的时间效率,小Q就需要结合时限以及评测机配置来设置合理的数据范围。 因为确定数据范围是一件痛苦…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...
SpringAI实战:ChatModel智能对话全解
一、引言:Spring AI 与 Chat Model 的核心价值 🚀 在 Java 生态中集成大模型能力,Spring AI 提供了高效的解决方案 🤖。其中 Chat Model 作为核心交互组件,通过标准化接口简化了与大语言模型(LLM࿰…...
【WebSocket】SpringBoot项目中使用WebSocket
1. 导入坐标 如果springboot父工程没有加入websocket的起步依赖,添加它的坐标的时候需要带上版本号。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dep…...
