并发编程
#udp不可靠的原因,当数据一旦发送到网络中后,会立即删除缓存中的数据
#tcp可靠的原因, 发送数据以后,会等待对方确认,如果没有确认信息,数据就会一直存在于缓存中,知道对方确认或者超时
#进程:一个正在被运行的程序称为进程,程序的执行过程,进程是一个抽象概念
# 进程源于操作系统
'''
多进程
阻塞:程序进入了I/O操作,就进入了阻塞状态
非阻塞:程序正常的运行,没有晕倒任何I/O操作
阻塞.非阻塞指的是程序的运行状态
并发:多个任务同时发生,但同一个时刻只有一个任务在执行(本质上是切换执行,速度非常快)
并行:多个任务同时执行,必须具备多个处理CPU,
并发,并行指的程序的执行/处理 方式
程序的三种状态:
运行,就绪,阻塞
时间片用完了之后会转为就绪态
Linux 和 Windows 开启进程的区别
Linux: 需要拷贝一份数据给子进程 ,linux会将数据完全拷贝给子进程
Windows: 需要拷贝一份数据子进程,windows只会一部分数据拷贝给子进程,同时会导入py文件来执行.这样一来会递归开进程
内存之间相互隔离
当你开启了一个子进程,并且给他一个任务,如果你希望知道这个任务的什么是完成,就需要等待
join:提高优先级,是的父进程需要等待子进程结束
孤儿进程:父进程先结束了,而子进程还运行着
孤儿进程有存在必要性,对操作系统无害
孤儿进程会被操作系统接管
僵尸进程:子进程已经结束了,但是操作系统会保留一些基本信息,比如pid
僵尸进程如果太多会占用大量的系统资源,导致系统无法开启新的进程
Linux中有一种机制:wait/waitpid用于父进程回收子进程的资源
python会自动回收僵尸进程
开启子进程的两种方式
from multiprocessing import Process
import os
import time
def task():
print('买烟去')
print(time.sleep(3))
print(os.getpid())
if __name__ == '__main__':
print('执行2')
p = Process(target=task)
p.start()
import os
from multiprocessing import Process
class MyProcess(Process):
def __init__(self,name):
super().__init__()
self.name = name