并发并行编程

概念

进程

进程就是正在进行的一个过程,或者一个任务,负责任务执行的就是cpu

进程和程序的区别

进程是一个正在运行的过程,是程序的运行过程,而程序只是一堆代码而已。

==同一个程序执行两次,也是两个进程==

并发与并行

并发是两个任务可以在重叠的时间段内启动,运行和完成。并行是任务在同一时间运行,例如,在多核处理器上。
并发是独立执行过程的组合,而并行是同时执行(可能相关的)计算。
并发是一次处理很多事情,并行是同时做很多事情。
应用程序可以是并发的,但不是并行的,这意味着它可以同时处理多个任务,但是没有两个任务在同一时刻执行。
应用程序可以是并行的,但不是并发的,这意味着它同时处理多核CPU中的任务的多个子任务。
一个应用程序可以即不是并行的,也不是并发的,这意味着它一次一个地处理所有任务。
应用程序可以即是并行的也是并发的,这意味着它同时在多核CPU中同时处理多个任务。

同步、异步和阻塞非阻塞

同步就是在发出一个功能调用时,没有得到结果之前,这个调用就不会返回,按照这个定义,大多数函数都是同步调用,但一般来讲,说同步,异步就是指那些需要其他部件协作或者要一定时间完成的任务,

异步和同步相对,功能调用发出时,调用者不能立即得到结果,功能完成后,才会通过状态,通知或回调来通知调用者,如果异步功能用状态来通知,那么调用者每隔一段时间来检查一次,效率很低,但是如果用通知方式,效率就很高,因为异步功能几乎不需要做额外的操作。

操作

multiprocessing模块介绍

它用来开启子进程,在子进程中执行定制的任务,比如函数,这个模块和多线程模块threading的编程接口类似。
支持子进程,通信和共享数据,执行不同形式的同步,提供了process,Queue,Pipe,Lock等组件。

Process类的介绍

创建进程的类:

  1. 需要使用关键字的方式来指定参数
  2. args指定的为传给target函数的位置参数是,一个元组形式,必须要有逗号

参数介绍

  1. gronp参数未使用,值始终未None
  2. target表示调用对象,也是子进程要执行的任务
  3. args表示调用的位置参数元组,args=(1,2,)
  4. kwargs表示调用对象的字典,kwargs={'name':'jh','age':18}
  5. name为子进程的名称

方法

  1. 对象.start():启动进程,调用该子进程中的对象.run()

  2. 对象.run() 进程启动时运行的方法,正是 它去调用target指定函数,我们自定义类的类中要实现这个方法

from multiprocessing import Process
import time

def task():
    print('进程 start')
    time.sleep(2)
    print('进程 end')

if __name__ == '__main__':
    p=Process(target=task)
    p.start()#告诉操作系统需要开子进程,操作系统开子进程需要时间
    time.sleep(5)
    print('主进程/父进程')

猜你喜欢

转载自www.cnblogs.com/jhpy/p/11508012.html