欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

初识并发编程

程序员文章站 2022-04-24 21:57:22
操作系统简单介绍 多道技术: 空间复用:把许多进程都放入内存中,等待操作系统操作 时间复用:在内存中一个程序中有io阻塞程序,操作系统会在程序阻塞时,执行其他的程序 进程之间是空间隔离的 并发 伪并行,看着像同时运行,其实是任务之间的切换(遇到io切换的会提高代码效率) ,任务切换+保存状态(保存现 ......

操作系统简单介绍

多道技术:

  空间复用:把许多进程都放入内存中,等待操作系统操作

  时间复用:在内存中一个程序中有io阻塞程序,操作系统会在程序阻塞时,执行其他的程序

进程之间是空间隔离的

并发

  伪并行,看着像同时运行,其实是任务之间的切换(遇到io切换的会提高代码效率) ,任务切换+保存状态(保存现场)

并行

  真正的同时在运行,应用的是多核技术(多个cpu)

 

进程三状态:就绪(等待操作系统调度去cpu里面执行)  执行  阻塞 

 

提交任务的方式:同步异步   任务的执行状态:阻塞非阻塞

异步:任务的提交方式,多个任务提交出去,同时执行

 :

异步非阻塞:

  多个任务同时提交,并且在程序运行的时候没有阻塞

进程的两种创建方式

1)

process(    target=f1,  args=(i,) (  或者  kwargs={‘形参名为key:值}  )      )

 

from multiprocessing import process

def f1(n):
    print(n)

if __name__ == '__main__':
    # p1 = process(target=f1,args=('钢铁侠',)) #创建进程对象
    p1 = process(target=f1,kwargs={'n':'钢铁侠'}) #创建进程对象
    p1.start() 

 2)

from multiprocessing import process

class myprocess(process):

    def __init__(self,n):
        super().__init__()  #别忘了执行父类的init
        self.n = n

    def run(self):
        print('宝宝and%s'%self.n)

if __name__ == '__main__':
    p1 = myprocess('苍老师')
    p1.start()             

 

 

 

join方法

  主进程等待子进程执行结束再继续执行

import time
from multiprocessing import process

def f1():
    time.sleep(2)
    print('xxxx')

def f2():
    time.sleep(2)
    print('ssss')

if __name__ == '__main__':
    p1 = process(target=f1,)
    p1.start()
    p1.join()  # 主进程等待子进程运行完才继续执行
    print('开始p2拉')

    p2 = process(target=f2,)
    p2.start()
    p2.join()
    print('我要等我的子进程...')
    print('我是主进程')

for 循环开启进程

 

import time
from multiprocessing import process

def f1(i):
    time.sleep(3)
    print(i)

if __name__ == '__main__':
    for i in range(20):
        p1 = process(target=f1,args=(i,))
        p1.start()