进程1

进程调度

  • 先来先服务调度算法

    # 对作业长有利,对作业短无溢
    
  • 短作业优先调度算法

    # 对短作业有利,对长作业无溢
    
  • 时间片乱转法+多级反馈队列

    看图了解

进程运行的三状态图

​ 看图了解

两对重要概念

  • 同步和异步

    # 描述的是任务的提交方式
    同步:任务提交之后,原地等待任务的返回结果,等待的过程中不做任何事(干等)
    	 程序层面上表现出来的感觉就是卡住了
    # 同步案例:
    import time
    def func():
        time.sleep(3)
        print('hello world')
    if __name__ = '__main__':
        func()  # 同步调用,只有当执行了print('hello world'),才能执行print('hahaha')
        print('hahaha')
        
    异步:任务提交之后,不原地等待任务的返回结果,直接去做其他事情
    	我提交的任务结果如何获取?
        任务的返回结果会有一个异步回调机制自动处理
    
  • 阻塞非阻塞

    # 描述的是程序/进程的运行状态
    阻塞:阻塞态
    非阻塞:就绪态、运行态
    
    理想状态:我们应该让我们写的代码永远处于就绪态和运行态之间切换
    

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

开启进程的两种方式

定心丸:代码开启进程和线程的方式,代码书写基本是一样的,你学会了如何开启进程就学会了如何开启线程

from multiprocessing import Process
import time


# 第一种方式
def task(name):
    print(f'{name} is running')
    time.sleep(3)
    print(f'{name} is over')


if __name__ == '__main__':
    # 1、创建一个对象
    p = Process(target=task, args=('ycc',))
    # 2、开起进程
    p.start()  # 告诉操作系统帮你创建一个进程  异步
    print('主')
'''
windows操作系统下 创建进程一定要在main内创建
因为windows下创建进程类似于模块导入的方式
会从上往下依次执行代码

linux中则是直接将代码完整的拷贝一份
'''

# 第二种方式 类的继承
from multiprocessing import Process
import time


class MyProcess(Process):
    def run(self):
        print('hello girl')
        time.sleep(3)
        print('get out')


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

总结

# 创建进程就是在内存空间中申请一块内存空间将需要运行的代码丢进去,、
# 一个进程对应在内存中就是一块独立的内存空间
# 多个进程对应在内存中就是多块独立的内存空间
# 进程与进程之间数据默认情况下是无法直接交互的,如果想交互可以借助于第三方工具、模块

join方法

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

from multiprocessing import Process
import time


# 第一种方式
def task(name,n):
    print(f'{name} is running')
    time.sleep(n)
    print(f'{name} is over')


if __name__ == '__main__':
    # # 1、创建一个对象
    # p1 = Process(target=task, args=('ycc',1))
    # p2 = Process(target=task, args=('xixi',2))
    # p3 = Process(target=task, args=('haha',3))
    # start = time.time()
    # # 2、开起进程
    # p1.start()  # 告诉操作系统帮你创建一个进程  异步
    # p2.start()
    # p3.start()
    # p1.join()  # 主进程等待子进程p运行结束之后再继续往后执行
    # p2.join()
    # p3.join()
    start = time.time()
    p_list = []
    for i in range(1,4):
        p = Process(target=task, args=('子进程%s'%i,i))
        p.start()
        p_list.append(p)
    for p in p_list:
        p.join()
    print('主',time.time()-start)

进程之间数据相互隔离

from multiprocessing import Process


money = 100


def task():
    global money
    money = 666
    print('子进程', money)


if __name__ == '__main__':
    p = Process(target=task)
    p.start()
    p.join()
    print(money)
    
'''
运行结果:
子进程 666
100
'''
posted @ 2021-07-22 15:31  ccFTD  阅读(41)  评论(0)    收藏  举报