进程
2022/1/16 7:05:50
本文主要是介绍进程,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
今日内容概要
- UDP代码编写
- 操作系统发展史
- 多道技术
- 进程理论
- 创建进程
- 进程的join方法
- 进程间默认无法交互
- 进程对象方法
UDP代码编写
1.服务端 import socket udp_sk = socket.socket(type=socket.SOCK_DGRAM) # UDP协议 udp_sk.bind(('127.0.0.1',9000)) # 绑定地址 msg,addr = udp_sk.recvfrom(1024) udp_sk.sendto(b'hi',addr) udp_sk.close() 2.客户端 import socket ip_port=('127.0.0.1',9000) udp_sk=socket.socket(type=socket.SOCK_DGRAM) udp_sk.sendto(b'hello',ip_port) back_msg,addr=udp_sk.recvfrom(1024) print(back_msg.decode('utf-8'),addr)
操作系统发展史
1.穿空卡片时代 人为将卡片输入计算机,cpu利用率低 2.联机批处理系统 将多个程序一次性录入磁带,之后交由输入机输入并由cpu处理 3.脱机批处理系统 现代计算机雏形(远程输入,高速磁带,主机)
多道技术
前提是单核cpu 多道技术:切换+保存状态 “”“ cpu工作机制 1.当某个程序进入IO状态的时候 操作系统会自动剥夺该程序的CPU执行权限 2.当某个程序长时间占用CPU的时候 操作系统也会剥夺该程序的CPU执行权限 ”“” 并发与并行 并发:多个系统看起来像同时运行 并行:多个程序同时运行
进程理论
进程与程序的区别: 程序:一堆代码 进程;正在运行的程序 进程调度算法演变: 1.FCFS 2.短作业优先调度算法 3.时间片转轮法+多级反馈队列 先分配给新的多个进程相同的时间片 之后根据进程消耗的时间片多少分类别 进程三状态:就绪态,运行态,阻塞态 程序要想进入运行态就必须先进入就绪态 同步和异步: 同步:提交完任务之后原地等待任务的返回结果,期间不做任何事 异步:提交完任务之后不原地等待任务的返回结果 直接去做其他事 结果由反馈机制自动提醒 '''用于描述任务的提交方式''' 阻塞与非阻塞: 阻塞:阻塞态 非阻塞:就绪态 运行态 '''用于描述任务的执行状态'''
创建进程
代码层面创建进程 """ 在windows中开设进程类似于导入模块 从上往下再次执行代码 一定需要在__main__判断语句内执行开设进程的代码 在linux中是直接将代码完整的复制一份执行 不需要在__main__判断语句内执行 """ 方法一 from multiprocessing import Process import time import os # 函数创建进程 def test(name): print(os.getpid()) # 当前进程id print(os.getppid()) # 父进程id print('%s is start' % name) time.sleep(3) print('%s is end' % name) if __name__ == '__main__': p = Process(target=test, args=('sss',)) # 生成一个进程对象 p.start() # 告诉操作系统开设一个新的进程,异步提交 print(os.getpid()) print('主') 方法二 # 类创建进程 class MyProcess(Process): def __init__(self, name): super().__init__() self.name = name def run(self): print('%s is start' % self.name) time.sleep(3) print('%s is end' % self.name) if __name__ == '__main__': p = MyProcess('swj') p.start() print('主')
进程的join方法
from multiprocessing import Process import time def index(name, n): print('%s is start' % name) time.sleep(n) print('%s is end' % name) if __name__ == '__main__': p_list = [] time_start = time.time() # for i in range(1, 4): # p = Process(target=index, args=(i,)) # p.start() # p.join() # 主进程等待子进程运行完成再接着往下运行 串行 9s+ # print(time.time() - time_start) for i in range(1, 4): p = Process(target=index, args=(i, i)) p.start() p_list.append(p) for p in p_list: p.join() # 3s+ 根据运行时间最长的进程来计算运行时间 print(time.time() - time_start) print('主')
进程间默认无法交互
from multiprocessing import Process money = 100 def index(): global money # 局部修改全局 money = 666 # 修改的是子进程的money print('子', money) if __name__ == '__main__': p = Process(target=index) p.start() p.join() print(money) print('主')
进程对象方法
from multiprocessing import Process, current_process import time print(current_process().pid) # 进程id def index(name): print('%s is start' % name) time.sleep(3) print('%s is end' % name) if __name__ == '__main__': p = Process(target=index, args=('sss',)) p.start() p.terminate() # 杀死子进程 time.sleep(0.1) print(p.is_alive()) # 判断子进程是否存活 print(p.name) # 查看进程名称 print('主')
这篇关于进程的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-07-04TiDB 资源管控的对撞测试以及最佳实践架构
- 2024-07-03万字长文聊聊Web3的组成架构
- 2024-07-02springboot项目无法注册到nacos-icode9专业技术文章分享
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现