计算机基础知识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.hqwc.cn/news/140825.html

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

相关文章

数据结构: 二叉搜索树

目录 1.二叉搜索树概念 2.二叉搜索树的操作 3.二叉搜索树的实现 3.1定义BST 3.2功能实现 1.默认成员函数 2.非递归 插入 查找 删除 3.递归 插入 查找 删除 4.二叉搜索树的应用 1.二叉搜索树概念 二叉搜索树又称二叉排序树,它可以是一棵空树&#xff…

深拷贝和浅拷贝

一、深浅拷贝是什么? 首先我们要明白一点,js中数据类型分为: 基本数据类型: Number, String, Boolean, Null, Undefined, Symbol 引用数据类型: Object ,Array , Function 对于引用数据 类型才有深浅拷贝的说法 1. 浅拷贝&…

中国移动集采120万部,助推国产5G赶超iPhone15

近期媒体纷纷传出消息指中国移动将大规模集采,预计将采购国产5G手机120万台,加上另外两家运营商的集采数量,估计集采数量可能达到300万部,如此将有助于它在国内高端手机市场赶超苹果。 国产5G手机在8月底突然上市,获益…

科技与时尚共进化,优衣库以硬实力创造品牌长期价值

时尚总是轮回,服装产品如何保持长青?对优衣库来说,产品力不褪色的密码之一,就是始终坚持推动服装科技与时尚融合,赋予生活潮流更多内涵,和更高品质的穿搭体验。 这一点,往往在每年换季新品上市…

Ubuntu docker安装mysql

本文介绍如何在docker中安装mysql,之前有尝试过先在docker中安装一个ubuntu到镜像,然后进去再去安装mysql相关的东西,发现不行,这边整理一下一个可行的方式。 在下载镜像的时候,直接下载mysql镜像。 1.搜索镜像 doc…

如何用滚动字幕丰富视频内容?只需5个步骤

视频制作需要各种元素来吸引观众的注意力,其中滚动字幕是一个非常实用的工具,可以提供背景信息,引导观众,或者作为一种装饰元素。以下是如何使用滚动字幕丰富视频内容的五个步骤: 1. 下载并安装适合的辅助工具 为了快速…

修炼k8s+flink+hdfs+dlink(六:学习k8s)

一:增(创建)。 直接进行创建。 kubectl run nginx --imagenginx使用yaml清单方式进行创建。 二:删除。 kubectl delete pods/nginx 三:修改。 kubectl exec -it my-nginx – /bin/bash 四:查看。 …

保序回归与金融时序数据

保序回归在回归问题中的作用是通过拟合一个单调递增或递减的函数,来保持数据点的相对顺序特性。 一、保序回归的作用 主要用于以下情况: 1. 有序数据:当输入数据具有特定的顺序关系时,保序回归可以帮助保持这种顺序关系。例如&…

Linux文件管理与用户管理

一、查看文件内容 1、回顾之前的命令 cat命令、tac命令、head命令、tail命令、扩展:tail -f动态查看一个文件的内容 2、more分屏显示文件内容(了解) 基本语法: # more 文件名称 特别注意:more命令在加载文件时并不…

PTA 小字辈(树)

题目 本题给定一个庞大家族的家谱,要请你给出最小一辈的名单。 输入格式: 输入在第一行给出家族人口总数 N(不超过 100 000 的正整数) —— 简单起见,我们把家族成员从 1 到 N 编号。随后第二行给出 N 个编号&#…

实时配送跟踪功能的实现:外卖跑腿小程序的技术挑战

在当今数字化时代,外卖和跑腿服务已经成为了生活中不可或缺的一部分。为了提供更好的用户体验,外卖跑腿小程序越来越注重实时配送跟踪功能的实现。这项技术挑战旨在确保顾客可以方便地跟踪他们的订单,以及配送员可以高效地完成送货任务。本文…

面向对象设计原则之依赖倒置原则

目录 定义原始定义进一步的理解 作用实现方法代码示例 面向对象设计原则之开-闭原则 面向对象设计原则之里式替换原则 面向对象设计原则之依赖倒置原则 面向对象设计原则之单一职责原则 定义 依赖倒置原则(Dependence Inversion Principle)&#xff0c…