Python知识——多道技术、进程、join方法

多道技术

单核实现并发的效果
必备知识点

  • 并发:看起来像同时运行的就可以称之为并发
  • 并行:真正意义上的同时执行
    ps:
  • 并行肯定算并发
  • 单核计算机肯定不能实现并行,但是可以实现并发。

多道技术图解:
在这里插入图片描述

多道技术重点知识:

空间和时间上的服用

  1. 空间上的服用:共用一套计算机硬件
  2. 时间上的服用:例如洗衣服10min 做饭30min 烧水10min 单道需要50min 多道只需要任务时间最长的那一个。其中会设计切换,和保存状态。

切换

  1. 当一个程序遇到IO操作时候,操作系统会剥夺该程序的CPU执行权限,作用:提高了CPU的利用率,并且也不影响程序的执行效率
  2. 当一个程序长时间占用CPU的时候,操作系统也会剥夺该程序的CPU执行权限。作用:降低了程序的执行效率(原本时间+切换时间)

进程理论

程序和进程的区别:
程序就是一堆躺在硬盘上的代码,是“死”的。
进程则表示程序正执行的过程,是“活”的。

进程调度

要想多个进程交替运行,操作系统必须对这些进程进行调度,这个调度也不是随即进行的,而是需要遵循一定的法则,由此就有了进程的调度算法。

  • 先来先服务调度算法:先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。FCFS算法比较有利于长作业(进程),而不利于短作业(进程)。由此可知,本算法适合于CPU繁忙型作业,而不利于I/O繁忙型的作业(进程)。
  • 短作业优先服务调用算法:短作业(进程)优先调度算法(SJ/PF)是指对短作业或短进程优先调度的算法,该算法既可用于作业调度,也可用于进程调度。但其对长作业不利;不能保证紧迫性作业(进程)被及时处理;作业的长短只是被估算出来的。
  • 时间片轮转+多级反馈队列:
    在这里插入图片描述

进程的三状态

在这里插入图片描述

两对重要概念

同步与异步

描述的是任务的提交方式

同步:任务提交之后,原地等待任务的返回结果,等待的过程中不做任何事。
程序层面上表现出来的感觉就是卡住了

异步:任务提交之后,不原地等待任务的返回结果,直接去做其他事情。
那么返回结果怎么获取?任务的返回结果会有一个异步回调机制自动处理

阻塞与非阻塞

描述的是程序的运行状态

阻塞:阻塞态
非阻塞:就绪态,运行态

上述概念组合:最高效的一种组合就是异步非阻塞

创建进程的两种方式

开启进程与线程的方式是相似的。

windows操作系统下 创建进程一定要在main内创建
因为windows下创建进程类似于模块导入的方式
会从上往下执行代码

# 第一种
from multiprocessing import Process
import time


def task(name):
    print('%s is running' % name)
    # time.sleep(3)
    print('%s is over' % name)


if __name__ == '__main__':
    # 1 创建一个对象
    p = Process(target=task, args=('jason',))
    # 2 开启进程
    p.start() # 告诉操作系统创建一个进程
    print('异步')

'''
异步
jason is running
jason is over
'''
# 第二种
from multiprocessing import Process


class MyProcess(Process):
    def run(self):
        print('running')
        print('over')


if __name__ == '__main__':
    p = MyProcess()
    p.start()
    print('主程序')

创建进程就是在内存中申请一块内存空间将需要运行的代码丢进去,一个进程对应在内存中就是一块独立的内存空间,多个进程对应在内存中就是多块独立的内存空间。

进程与进程之间数据默认情况下是无法直接交互,如果想交互可以借助第三方工具、模块。

Join方法

join是让主进程等待子进程代码运行结束之后,再继续运行,不影响其他子进程的执行

from multiprocessing import Process
import time


def task(name):
    print('%s is running' % name)
    time.sleep(3)
    print('%s is over' % name)


if __name__ == '__main__':
    # 1 创建一个对象
    p1 = Process(target=task, args=('jason',))
    # 2 开启进程
    p1.start()  # 告诉操作系统创建一个进程
    p1.join()  # 主进程等待子进程运行结束之后再继续执行
    print('异步')

'''
jason is running
jason is over
异步
'''
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值