同步与异步,回调与协程

本文探讨了同步与异步的概念,以及它们在编程中的实现方式,包括回调和协程。通过Python示例展示了同步HTTP请求的阻塞问题,以及异步回调和协程如何提高效率。异步协程使用了generator和gevent,实现了高效的并发执行,降低了回调地狱的问题,提高了代码可读性和维护性。
摘要由CSDN通过智能技术生成

目录

  • 概念上下文:

  • 同步的方式:

  • 异步加回调的方式:

  • 异步协程方式:

  • 总结:

这里分享一个 协程原理到实现,全局分析丨协程的切换与调度视频点击查看:「链接」

正文

  本文主要介绍在网络请求中的同步与异步,以及异步的表现形式: 回调与协程,并通过python代码展示各自的优缺点。

概念上下文:

回到顶部

  当提到同步与异步,大家不免会想到另一组词语:阻塞与非阻塞。通常,同时提到这个这几个词语一般实在讨论network io的时候,在《unix network programming》中有详尽的解释,网络中也有许多讲解生动的文章。

  本文所讨论的同步与异步,是指对于请求的发起者,是否需要等到请求的结果(同步),还是说请求完毕的时候以某种方式通知请求发起者(异步)。在这个语义环境下,阻塞与非阻塞,是指请求的受理者在处理某个请求的状态,如果在处理这个请求的时候不能做其它事情(请求处理时间不确定),那么称之为阻塞,否则为非阻塞。

  举个例子,我去柜台办理业务,那我是请求者,柜员时受理者。如果我在柜台一直等着柜员办理,直到办理完毕,那么对于我来说,就是同步的;如果我只是在柜员那里登记,然后到一边歇着,等柜员办理完毕之后告诉我结果,那么就是异步的。对于柜员,办理业务的时候可能需要等待打印机打印,如果在这个时候柜员去处理其他人的业务,那么就是非阻塞的,如果一定得到把我的业务办完再接待下一位顾客,那么就是阻塞的。

  本文站在请求发起者的角度来思考同步与异步,在实际开发中,一个最简单的例子就是http请求。假设这么一个场景,程序需要访问两个网址(通过url),如果只有一个线程。那么同步与异步分别怎么处理呢

同步的方式:

回到顶部

  python的urllib2提供了http请求的功能,我们来看看代码:

1 def http_blockway(url1, url2):
 2     import urllib2 as urllib
 3     import time
 4     begin = time.time()
 5     data1 = urllib.urlopen(url1).read()
 6     data2 = urllib.urlopen(url2).read()
 7     print len(data1), len(data2)
 8     print 'http_blockway cost', time.time() - begin
 9 
10 url_list = [ 'ht
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值