计算机基础知识33

进程基础(操作系统中的概念)

进程它是操作系统总最重要的概念,线程也是

进程和线程都是有操作系统来调度使用的,我们程序员是不能控制的

# 进程和程序是两码事、完全不一样

      程序:其实一个死的东西、一堆代码就是程序,它也没有生命周期

      进程:它是有生命周期的,这个任务做完,进程就不存在了

              # 程序就是流程. 做菜的过程就是进程

                 厨师就是线程,谁干活谁就是线程,做菜完,进程就不存在了

# 一个进程中至少要有一个线程,可以有多个线程

协程就是程序员级别的,协程的调度它就是有我们程序员自己来调度的

          进程 >>> 线程  >>> 协程

          他们三个消耗资源的对比:进程 >>> 线程 >>> 协程

# 单个CPU一次只能运行一个任务,打开浏览器的过程就是进程

进程调度算法(四种算法)

# CPU的工作机制:

         1. 遇到I/O的时候,CPU会交出执行权限
         2. 当CPU遇到耗时比较长的时候,也会自动交出执行权限,切换到其他任务

#  I/O密集型:会被时间所阻塞,不会占用大量的CPU资源,比如sleep(3)

   计算密集型:没有时间的大量消耗,不占用大量的时候,会占用大量的CPU资源

for i in range(10000000):i+=1

一、先来先服务调度算法
二、短作业优先调度算法
三、时间片轮转法(选时间合适的)
四、多级反馈队列

进程的并行和并发概念

并行:统一时刻同时运行

并发:一段时间内看起来是同时运行

          CPU是单核时,同一时刻能不能做到同时执行多个任务,看上去是,来回切换

          CPU4核,执行2个任务,派哪两个核是由操作系统做

"""面试题:你对高并发有什么见解? 聊聊高并发? 你如何解决?"""

同步异步阻塞和非阻塞

# 老师:

       同步:每一次的运行都要依赖于上一步的结果       # 电话不挂,查到告诉
       异步:每次的运行结果不依赖于上次的结果          #  先挂,查到后再打电话告诉

# 我:

        阻塞: # 电话不挂,一直等老师消息
       非阻塞:  # 先干自己的事,没有再打电话给老师询问消息

异步+非阻塞 # 是效率最高的
                    同步+阻塞   # 是效率最低的 

如何开启进程

from multiprocessing import Processdef task():with open('a.txt', 'w', encoding='utf-8') as f:f.write('helloworld')if __name__ == '__main__':p = Process(target=task)  #   实例出来一个进程类, 让这个进程执行task任务p.start()    # 真正的开启进程

# 开启一个进程来执行task任务,真正执行的是线程,进程里面至少有一个线程

# 操作系统开启进程

Process类的参数

进程的几个属性:1、进程名   2、进程号pid   kill

# 查看就进程名称      print( p.name)

# 改进程名字

p.name = '这是新的进程名'
print(p.name)  # 这是新的进程名

# 传参

from multiprocessing import Process
import timedef task(name, age, gender):time.sleep(3)print("子进程的代码")if __name__ == '__main__':# 只是通知操作系统去开进程,有一定时间,开启进程其实消耗很大p = Process(target=task, name='process-2')   # 子进程p.start()  # 启动进程

# 查看进程号:print(p.pid) # process id

task任务里都是子进程,其余是主进程

           p.start()  # 真正的开启进程

           p.terminate() # 杀死进程,结束任务

           print(p.is_alive())   # True 看进程是否还在

           p.join() # 等待子进程的代码全部执行完毕,在走主进程的

单进程

如何开启多进程

多进程就意味着可以同时做多个任务

from multiprocessing import Process
import timedef task(name):with open('a.txt', 'a', encoding='utf-8') as f:f.write('helloworld')if __name__ == '__main__':for i in range(5):     # 执行5次p=Process(target=task, kwargs={'name':'kevin'})p.start()    

# 理论上可以一直开进程,但是需要考虑资源的消耗情况

       # 先执行主进程,再执行子进程

多进程中,想先执行子进程再主进程,p.join(),不能加在for循环中,不然是5秒

from multiprocessing import Process
import timedef task(name):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()ll.append(p)for j in ll:        # 小的高并发情况,双11同时涌进大量客户j.join()print("主进程, 总时间:", time.time() - start_time)

基于TCP协议的高并发程序

一个服务端不能够同时给多个客户端发送消息

import socket  # python提供的socket模块def task(conn):while True:try: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__':server = socket.socket()  # 默认是TCP协议server.bind(('127.0.0.1', 8001))  # 服务端绑定一个地址server.listen(1)  # 监听,半连接池print('服务端正在准备接收客户端消息:')while True:conn, client_addr = server.accept()  # 接收,  程序启动之后,会在accept这里夯住,阻塞p = Process(target=task, args=(conn,))p.start()

今日思维导图: 

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

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

相关文章

通信管理机在变电站监控系统中的应用-安科瑞黄安南

随着通信管理机在我国历经多年的发展,随着技术的不断创新和完善,越来越多的变电站认可和接受并且正在使用着通信管理机。 1通信管理机的功能特点 通讯管理机一般运用于变电所、调度站,通讯管理机通过控制平台控制下行的RRtu设备&#xff0c…

QT学习笔记-QT程序执行Linux Shell命令实现动态添加路由

QT学习笔记-QT程序执行Linux Shell命令实现动态添加路由 背景关键代码程序界面 背景 在使用QT进行Linux下应用程序开发时,在特定业务需求下,需要在程序中执行Linux的Shell命令。QT中执行Linux命令可以通过QProcess类和system来实现,如果需要…

美芯片禁令再次扩大,波及英伟达、AMD以及intel等科技公司 | 百能云芯

拜登政府17日宣布,计划停止英伟达(Nvidia)、超微半导体以及英特尔等科技公司设计的先进AI芯片输出中国大陆,英伟达(Nvidia)昨日股价重挫4.68%至每股439.38美元;天风国际证券分析师郭明錤表示&am…

flask实战(问答平台)

课程链接 问答平台项目结构搭建 先创建一个配置文件config.py,后面有些配置写在这里 #app.py from flask import Flask import configapp Flask(__name__) #绑定配置文件 app.config.from_object(config)app.route(/) def hello_world(): # put applications …

嵌入式行业是否会面临中年危机?

今日话题:嵌入式行业是否会面临中年危机?事实上,无论你在哪个行业工作,都可能面临下岗风险。因此,我的建议是选择一个有前景、发展空间大的行业和方向,并不断提升自己的技能价值。为了帮助你在嵌入式领域取…

实测文心一言4.0,真的比GPT-4毫不逊色吗?

10月17日,李彦宏在百度世界2023上表示。当天,李彦宏以《手把手教你做AI原生应用》为主题发表演讲,发布文心大模型4.0版本。 今天,咱们就开门见山啊。这一回要测一测,昨天才发布的文心一言大模型 4.0。 之所以要测它&…

JVM(Java Virtual Machine)内存模型篇

前言 本文是JVM系列的内存模型篇,参考资料为《深入理解Java虚拟机》,本文章将会以HotSpot 虚拟机为介绍基础。 1.JVM简单介绍 Java Virtual Machine是运行Java程序的基础,JVM基于C、C实现,JVM有很多种类,但是这些虚…

扬帆起航:许战海方法论日文版正式发布

近日,中国头部战略咨询机构‘许战海咨询’最新研究成果《中国汽车行业新能源转型战略》行业白皮书日文版,即将在日本发布。同时发布的日文版核心方法论白皮书还有《主品牌进化战略》、《第二招牌增长战略》、《链主品牌:制造业的竞争之王》等…

关于代理服务器那点事

问题:我们有时候会遇到,后端再本地服务器开发,不是测试服上,这时候我们就需要代码几个baseurl 答:一个axios只能代理一个baseurl axios 库本身只能代理一个 baseURL。在一个 axios 实例中,只能指定一个基…

Spring framework day 01:spring 整合数据源(连接池)

前言 在现代的企业应用开发中,数据库是不可或缺的一部分。而对于大部分的应用程序来说,与数据库的交互涉及到频繁的连接、查询和事务操作。为了提高应用程序的性能和可扩展性,使用连接池来管理数据库连接是一个不错的选择。而 Spring 框架提…

Spring事件ApplicationEvent源码浅读

文章目录 demo应用实现基于注解事件过滤异步事件监听 源码解读总结 ApplicationContext 中的事件处理是通过 ApplicationEvent 类和 ApplicationListener 接口提供的。如果将实现了 ApplicationListener 接口的 bean 部署到容器中,则每次将 ApplicationEvent 发布到…

为什么Redis集群的最大槽数是16384个?

对于客户端请求的key,根据公式HASH_SLOTCRC16(key) mod 16384,计算出映射到哪个分片上,然后Redis会去相应的节点进行操作! 为什么有16384个槽? Redis集群并没有使用一致性hash而是引入了哈希槽的概念。Redis 集群有1…

线性代数-Python-01:向量的基本运算 -手写Vector -学习numpy的基本用法

文章目录 代码目录结构Vector.py_globals.pymain_vector.pymain_numpy_vector.py 一、创建属于自己的向量1.1 在控制台测试__repr__和__str__方法1.2 创建实例测试代码 二、向量的基本运算2.1 加法2.2 数量乘法2.3 向量运算的基本性质2.4 零向量2.5 向量的长度2.6 单位向量2.7 …

C++string类重要函数模拟实现

为了和C标准库区分,以下代码除主函数外均在namespace空间 目录 一.成员 二、带参构造函数 三、拷贝构造函数和赋值运算符重载 四、析构函数 五、重要成员函数实现 1. c_str函数 2. operator[]重载 3. size函数和capacity函数 4.reverse函数 5. push_back和…

【解决】运行vue项目,启动报错 in ./node_modules/@intlify/core-base/dist/core-base.cjs

我的处理方式: 一开始查了好多方法,删除node_modules,重新安装,切换node版本等,但是发现并没有用 之后来发现是安装依赖包的时候有些包安装失败导致的,只要有针对性的重新安装依赖就可以了 例如: in ./n…

Splashtop 与 Canopy 携手共同增强对物联网设备的远程管理

2023年10月17日 加利福尼亚州库比蒂诺 Splashtop 在安全远程访问解决方案领域处于领先地位,Canopy 则是用于复杂硬件部署的领先 RMM 平台,双方今天宣布达成战略合作伙伴关系,以进一步增强和简化对物联网设备的远程管理。通过此次合作&#x…

JSX的本质

一、本质 React.createElement即h函数,返回vnode第一个参数,可能是组件,也可能是html tag组件名,首字母必须大写(React规定) 二、babel试一试 (babel集成了jsx的编译环境) // JSX…

Linux生产者消费者模型

生产者消费者模型 生产者消费者模型生产者消费者模型的概念生产者消费者模型的特点生产者消费者模型优点 基于BlockingQueue的生产者消费者模型基于阻塞队列的生产者消费者模型模拟实现基于阻塞队列的生产消费模型 生产者消费者模型 生产者消费者模型的概念 生产者消费者模式就…

Spring framework Day 23:容器事件

前言 容器事件是 Spring Framework 中的一个重要概念,它提供了一种机制,使我们能够更好地了解和响应 Spring 容器中发生的各种事件。通过容器事件,我们可以在特定的时间点监听和处理容器中的各种状态变化、操作和事件触发,以实现…