python面试之二 异步与同步的区别

同步和异步

  • 举个例子来说,你去商场买手机的时候正好口渴了。

    • 同步的意思就是说,你和店员说你看上这部手机了,然后店员去仓库拿货,你在店里等待店员回来后再去买水喝。

    • 异步的意思就是说,你在店员去仓库拿货的时候,你去买水喝,喝完水后,刚好店员也带着手机回来了。

  • 使用方法的调用来举例:

    • 同步方法 调用一旦开始,调用者必须等到方法调用返回后,才能继续该方法后续的行为代码。

    • 异步方法 调用更像一个消息传递,一旦调用开始,该方法调用就会立即返回,调用者就可以继续后续的操作。而异步方法通常会在另外一个线程/进程中,“真实”地执行着。整个过程,不会阻碍调用者的工作(让另一个人在等店员取货回来,你去买水喝)

注意:同步和异步针对是cup遇到阻塞操作时,所产生的不同行为!

注意

  • 异步可以是基于并行的也可以是基于并发的,但是大部分情况下是基于并发的。
    • 基于并发是指,在方法调用开始的时候,启动另一个进程/线程执行方法后序的操作,而当前的进程/线程执行该方法内部的操作。则当前进程/线程和启动的另一个新的进程/线程是基于cpu的调度算法,调度执行的。
    • 基于并行是指,在多核情况下,如果应用程序执行过程中设计到的计算量特别大,则相关的运算操作启动的进程/线程会在另一个cup中启动,这样可以实现真正的并行。

比如下面py文件:

import time
def get_request(url):
    print('正在请求网址的数据:',url)
    time.sleep(2)
    print('请求结束:',url)

if __name__ == "__main__":
    start = time.time()
    urls = ['www.baidu.com','www.jd.com','www.taobao.com']
    for url in urls:
        get_request(url)
    print('总耗时:',time.time()-start)

在这里插入图片描述
可以看出上面是一个同步进程,使用了6秒.

import time
from multiprocessing import Process
def get_request(url):
    print('正在请求网址的数据:',url)
    time.sleep(2)
    print('请求结束:',url)

if __name__ == "__main__":
    urls = ['www.baidu.com','www.jd.com','www.taobao.com']
    for url in urls:
        #创建了三个进程,同时执行三个任务
        p = Process(target=get_request,args=(url,))
        p.start()

在这里插入图片描述

可以看到,异步还是非常快的.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值