博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
并发编程
阅读量:4488 次
发布时间:2019-06-08

本文共 3723 字,大约阅读时间需要 12 分钟。

# 操作系统的发展历程     # 主要的人机矛盾是什么 : CPU的使用率         # 输入\输出数据和CPU计算没有关系     # 操作系统是怎么进化的         # 传统的纸带输入         # 磁带的存储降低了输入输出数据占用的时间,提高了CPU的利用率         # 多道操作系统的出现 : 提高了CPU的利用率,单纯的切换会浪费时间             # 一台计算机上同时可以出现多个任务             # 能够将多个任务所使用的资源隔离开             # 当一个任务遇到输入输出工作的时候能够让另一个任务使用CPU去计算         # 分时操作系统 : 降低了cpu的利用率,提高了用户的体验             # 时间片轮转         # 实时操作系统             # 操作精密仪器或者设备             # 实时交易类     # 操作系统的作用         # 在具体的应用与所有的硬件之间起到了一个协调管理的作用         # 负责分配计算机中所有的资源 # 输入输出 Input/Output     # 向内存输入 : read,recv,recvfrom,import,input     # 从内存输出 : write,send,sendto,print # CPU的工作效率和输入输出的工作效率差 # 并发和并行     # 多个程序交替在同一个cpu上被计算 并发     # 多个程序同时在多个cpu上被计算   并行 # 阻塞/非阻塞     # 阻塞 CPU不工作     # 非阻塞 CPU一直在工作 # 异步和同步     # 异步 :发布一个任务,不等待这个任务的结果就继续执行我的任务     # 同步 :发布一个任务,等待获取这个任务的结果之后才继续执行我的任务 # 同步阻塞/同步非阻塞/异步阻塞/异步非阻塞 # 进程和程序     # 进程就是运行中的程序     # 每一个进程在计算机中都有一个唯一的进程id,pid  process id # 进程  是计算机中资源分配的最小单位     # 三状态 : 就绪 运行 阻塞 # 线程  是计算机中能够被CPU调度的最小单位     # 是进程中的一个单位,它不能独立存在
使用Process类创建一个子进程 import os import time from multiprocessing import Process def func(a,b,c):     time.sleep(1)     print(a,b,c,os.getpid(),os.getppid())     # pid : processid   ppid : parent process id # Process进程类 if __name__ == '__main__':     # windows操作系统下开启子进程子进程中的代码是通过import这种方式被导入到子进程中的     print('主 :', os.getpid())     Process(target=func,args=(1,2,3)).start()     # Process(target=func).start()     # Process(target=func).start()
如何开启多个子进程
import os import time from multiprocessing import Process def func(a,b,c):     time.sleep(1)     print(a,b,c,os.getpid(),os.getppid()) if __name__ == '__main__':     # Process(target=func,args=(1,2,3)).start()     # Process(target=func,args=(2,3,4)).start()     # Process(target=func,args=(3,4,5)).start() for i in  range(1,4):         Process(target=func, args=(i, i+1, i+2)).start()
join方法
import time import random from multiprocessing import Process def send_mail(name):     time.sleep(random.uniform(1,3))     print('已经给%s发送邮件完毕'%name) if __name__ == '__main__':     lst = ['alex','yuan','宝元','太白']     阻塞等待一个子进程结束     p = Process(target=send_mail, args=('alex',))     p.start()     p.join()   # 阻塞,直到p对应的进程结束之后才结束阻塞     print('所有的信息都发送完毕了')  p_l = []     for name in lst:         p = Process(target=send_mail,args=(name,))         p.start()         p_l.append(p) for p in p_l : p.join()     print('所有的信息都发送完毕了')
守护进程
import time from multiprocessing import Process def func():     for i in range(20):         time.sleep(0.5)         print('in func') def func2():     print('start : func2')     time.sleep(5)     print('end : func2') if __name__ == '__main__':     p = Process(target=func)  p.daemon = True   # 表示设置p为一个守护进程     p.start()     p2 =Process(target=func2)     p2.start()     print('in main')     time.sleep(3)     print('finished')     p2.join()
# 主进程和子进程互不干扰 # 主进程执行完毕之后程序不会结束,会等待所有的子进程结束之后才结束 # 为什么主进程要等待子进程结束之后才结束?     # 因为主进程要负责给子进程回收一些系统资源 # 守护进程 :     # 是一个子进程,守护的是主进程     # 结束条件 : 主进程的代码结束,守护进程也结束 # 进程     # 主进程的代码结束,守护进程结束     # 主进程要回收守护进程(子进程)的资源     # 主进程等待其他所有子进程结束     # 主进程回收所有子进程的资源
面向对象的方式实现多进程
import os from multiprocessing import Process class MyProcess(Process): def run(self):   # 希望在子进程中执行的代码就放在run方法中         print(os.getpid()) if __name__ == '__main__':     for i in range(10):         MyProcess().start() import os from multiprocessing import Process class MyProcess(Process):     def __init__(self,a,b):         super().__init__()         self.a = a         self.b = b     def run(self):   # 希望在子进程中执行的代码就放在run方法中         print(os.getpid(),self.a,self.b)         self.func() if __name__ == '__main__':     for i in range(10): MyProcess(1,2).start()   # 通知操作系统开进程,执行run方法
 
 
 
 

转载于:https://www.cnblogs.com/anthony-wang0228/p/10696364.html

你可能感兴趣的文章
django 1.11.16之环境搭建
查看>>
15.SpringMVC和Spring上下文关系(为什么SpringMVC可以调用到Spring)
查看>>
Syncfusion的社区许可及免费电子书和白皮书
查看>>
JAVA自学作业02
查看>>
蛇形矩阵
查看>>
活动选择
查看>>
7832:最接近的分数
查看>>
初识window phone 7程序
查看>>
思维导图
查看>>
XE6 c++builder Edit垂直居中
查看>>
leetCode 1. Two Sum
查看>>
CSAcademy Beta Round #5 Long Journey
查看>>
关于Java中volatile关键字笔记
查看>>
第四次作业
查看>>
Linux netstat常用命令
查看>>
实用的Portraiture滤镜磨皮教程
查看>>
关于minigui的皮肤控件无法显示问题
查看>>
【HANA系列】SAP HANA中null变成问号的问题
查看>>
【ABAP系列】SAP DOI技术中I_OI_SPREADSHEET接口的使用
查看>>
SqlServer之xp_cmdshell_使用以及配置(转)
查看>>