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

并发编程1

程序员文章站 2024-03-12 15:12:02
...

多道技术

  1. 并发:看起来像是同时运行,实际,是靠不断切换任务来实现的
    并行:同时运行多个任务
  2. 时间复用:利用中间空闲时间做其他事情。比如;做饭、洗衣服、烧水,就可以先洗好米放锅里煮,然后去把衣服丢洗衣机洗,然后再去烧水,这样就不用等饭煮好,再去洗衣服,烧水。
    空间复用:多个程序共用一套计算机硬件。比如,电脑同时打开微信、QQ
  3. 实质:切换+保存。每次切换都会保存切换的时候的状态。
  4. 单道技术(串行):按任务顺序执行

单道跟多道的比较如下:
并发编程1

进程

  1. 同步:等被依赖任务执行完后,再执行依赖任务。例子:去银行办理业务,排队等待,一直等待银行办理业务情况
  2. 异步:被依赖任务、依赖任务同时执行。例子:取号排队,这个过程只需取个号,就可以去做其他事情(开一把王者或者吃鸡之类),等待轮到这个号的时候,业务人员会喊你(类似于回调函数)。
  3. 阻塞:阻塞态
  4. 非阻塞:就绪态、执行态
  5. 实质:在内存中申请一块内存空间存放代码,即,一个进程对应一块内存空间。
  6. 创建进程的两种方式:
    注意:在widows系统下,进程的创建必须在main()内,否则,会报错。因为在widows系统下,进程的创建实质:是把代码复制后,放到新的内存空间,如果创建进程的代码不放在main()内,则会进入不断创建子进程的死循环
# -*-coding:utf-8 -*-
#第一种
# from multiprocessing import Process
# import time
#
#
# def task(name):
#     print(f'{name}我来了')
#     time.sleep(1)
#     print(f'{name}我走了')
#
# if __name__ == '__main__':
#     p=Process(target=task,args=('jk',))
#     p.start()
#     print('主进程')

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


class MyProcess(Process):
    def run(self):
        print('我来了')
        time.sleep(1)
        print('我走了')

if __name__ == '__main__':
    p=MyProcess(name='hello')
    p.start()
    print('主')
  1. join()方法:等待子进程执行完后再执行。
# -*-coding:utf-8 -*-
from multiprocessing import Process
import time


def task(name):
    print(f'{name}我来了')
    time.sleep(1)
    print(f'{name}我走了')

if __name__ == '__main__':
    p=Process(target=task,args=('jk',))
    p1 = Process(target=task, args=('python',))
    p2 = Process(target=task, args=('java',))
    p.start()
    p1.start()
    p2.start()
    p.join()
    p1.join()
    p2.join()
    print('主进程')