进程与程序 并行 并发 串行 阻塞 join函数

进程是正在运行的程序,程序是程序员编写的一对代码,也就是一堆字符,当这堆代码被系统加载到内存并执行,就有了进程。

(需要注意的是:一个程序是可以产生多个程序,就像我们可以同时运行多个QQ程序一样,会形成多个进程)

并发指的是,多个事件同时发生了(单核状态下就是通过切换+保存状态 就是多道技术
)                                                                                           并行:真正意义上的同时执行(只在

多核处理器才有可能出现

)                                                                                           串行:按照顺序依次执行 第一行执行完毕才会执行第二行,需要注意的是 串行执行的过程中因为计算操作太多 也会导致程序卡住 但是这与io阻塞是不同的io阻塞立马将cpu切换到其他程序  而串行执行一堆计算任务 cpu没有切走

阻塞与非阻塞指的是程序的状态                                                     

阻塞状态指的是因为程序遇到了io操作,或者是sleep,导致后续代码不被cpu执行                                                 非阻塞与之相反,表示程序正在被cpu执行                        补充:进程的三种状态                                                       就绪态,运行态,和阻塞态                                                      多道技术会在进程执行时间过程或遇到io时自动切换换其他进程,意味着io操作与进程被剥夺执行都会造成进程无法继续执行                                                                           join函数  :调用start函数后的操作就由操作系统来玩了,至于何时开启进程,进程何时执行,何时结束都与应用程序无关,所以当前程序会继续往下执行,join函数就可以是父进程等待子进程结束后继续执行   

from multiprocessing import Process
import time,random

x=1000

def task(n):
print('%s is runing' %n)
time.sleep(n)

if __name__ == '__main__':
start_time=time.time()

p1=Process(target=task,args=(1,))
p2=Process(target=task,args=(2,))
p3=Process(target=task,args=(3,))
p1.start()
p2.start()
p3.start()

p3.join() #3s
p1.join()
p2.join()

print('主',(time.time() - start_time))

start_time=time.time()
p_l=[]
for i in range(1,4):
p=Process(target=task,args=(i,))
p_l.append(p)
p.start()
for p in p_l:
p.join()

print('主',(time.time() - start_time))

                                                                       

原文地址:https://www.cnblogs.com/tangda/p/10490546.html