Python并发编程之多进程

一、什么是进程?

进程:进程是一个抽象的概念,指的是 程序的运行过程

Ps:进程是操作系统最核心的概念,而负责执行任务的则是CPU

二、程序与进程的区别

程序:指的是存放一堆代码的文件
进程:指的是程序的运行过程

Ps:同一个程序执行两次也是两个进程
例:打开暴风影音,虽然是一个软件,但可以同时播放苍❤空和饭❤爱

三、并发与并行

无论是并发还是并行,在用户看来都是‘同时’运行的,不管是进程还是线程都知识一个任务,真正干活的是CPU,CPU做这些任务,但CPU同一时刻只能执行一个任务

1、并发:伪并行,看起来是同时运行,单个CPU+多道技术就可以实现并发(并行也属于并发)
2、并行:同时运行,只有具备多个CPU才能实现并行单核下,可以利用多道技术,多个核,每个核也都可以利用多道技术(多道技术是针对单核而言的)有四个核,六个任务,这样同一时间有四个任务被执行,假设分别被分配给了cpu1,cpu2,cpu3,cpu4,一旦任务1遇到IO就被迫终端执行,此时任务就拿到了cpu1的时间去执行,这就是单核下的多道技术,而一旦任务1的I/O结束,操作系统会重新调用它。(进程的调度、分配给哪个CPU运行,由操作系统说了算),可能被分配给四个cpu中的任意一个去执行

四、同步\异步\阻塞\非阻塞

1、同步

所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不会返回,按照这个定义,其实绝大数函数都是同步调用。但是一般而言,我们再说同步、异步的时候,特指那些需要其他部件协作或者需要一定时间完成的任务。

2、异步

异步的概念和同步相对。当一个异步功能调用发出后,调用者不能立刻得到结果,当该异步功能完成后,通过状态、通知或回调来通知调用者。如果异步功能用状态来通知,那么调用者就需要每隔一段时间检查一次,效率就很低

3、阻塞

阻塞调用是指调用结果返回之前,当前线程会被挂起(如遇到io操作)。函数只有在得到结果之后才会将阻塞的线程激活。有人也许会把阻塞调用和同步调用等同起来,实际上他是不同的。对于同步调用来说,很多时候当前线程还是激活的,只是从逻辑上当前函数没有返回而已。

4、非阻塞

非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前也会立刻返回,同时该函数不会阻塞当前线程。

5、小结

1.同步与异步针对的是函数/任务的调用方式:同步就是当一个进程发起一个函数(任务)调用的时候,一直等到函数(任务)完成,而进程继续处于激活状态。而异步情况下是当一个进程发起一个函数(任务)调用的时候,不会等函数返回,而是继续往下执行当,函数返回的时候通过状态、通知、事件等方式通知进程任务完成。

2.阻塞与非阻塞针对的是进程或线程:阻塞是当请求不能满足的时候就将进程挂起,而非阻塞则不会阻塞当前进程

五、进程的创建

对于通用系统主要分为四种形式创建新的进程:

1、系统初始化,在windows的任务管理器,前台进程负责与用户交互,后台运行的进程与用户无关
2、一个进程在运行过程中开启了子进程
3、用户的交互式请求,而创建一个新进程
4、一个批处理的初始化

新进程的创建都是由一个已经存在的进程执行了一个用于创建进程的系统调用二创建的

1、在unix中系统调用是:fork,fork会创建一个与父进程一摸一样的副本,二者有相同的存储映像,同样的环境字符串和同样的打开文件
2、在windows中该系统调用是:createProcess,createprocess既处理进程的创建,也负责把正确的程序装入新进程

创建进程的两种方式

# 第一种:
import time
from multiprocessing import Process


def task(n):
    print('我是子进程')
    time.sleep(n)
    print('子进程结束')


if __name__ == '__main__':
    # args=(), kwargs={}
    # t=Process(task,args=(1,))
    t = Process(target=task, kwargs={
   'n': 1})
    t.start()  # 通知操作系统,开启进程,执行task函数
    print('主')

# 第二种:
from multiprocessing import Process
import time

class Task(Process):
    def __init__(self, n):
        super().__init__()
        self.n = n

    def run(self):
        print('我是子进程')
        time.sleep(self.n
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值