使用以下技术实现异步的方法在概念上的区别是什么?我的主要搜索是Django,但是我正在寻找一个概念上的答案,它描述了技术背后的想法。
我在网上找到了关于大多数这些方法的教程,但是它们并没有解释背后的概念,只解释了技术实现。
发布于 2013-03-17 14:31:09
异步编程很难让你头脑清醒。基本思想是绕过阻塞IO的方法。阻塞IO是从写入到查询数据库的文件,查询REST,以及在等待其他事情发生时中断应用程序处理流程的任何东西。
比如说,你构建了一个画廊应用程序,用户可以上传大高清分辨率图像来炫耀。但是你需要制作这个大图片的各种拷贝--用户上传,缩略图,更小的分辨率版本等等--这需要一些阻塞IO。您需要压缩映像,这是相当密集的,一旦压缩,您需要将这些压缩到磁盘,然后您可能需要将所有这些信息存储在DB中。在一个请求中这样做会给用户带来非常缓慢、笨重的性能,老实说,后端进程可能会在它完成所需的所有任务之前超时。它的规模也不是很好。
解决这一问题的一种方法是使用异步编程。一旦用户上传完毕,您就可以向其他应用程序发送各种信号,等待他们将图像压缩或向DB写入数据的机会。一旦信号触发,这些后台进程就开始工作,用户不必坐着等待一个长时间的请求完成,相反,他们可以继续浏览站点,喝杯咖啡,并在他们的缩略图制作完成后得到通知等等。
在上面的示例中,我将使用芹菜、RabbitMQ和SocketIO (或者可能是TornadIO)来实现这一点。用户上传完成后,我会发射芹菜任务,芹菜使用RabbitMQ (我更喜欢雷迪斯)来管理任务,你可以让10,20,30名芹菜工人在这些图片上传的背景下进行处理。一旦芹菜完成了它的工作,它将向套接字服务器发送一条消息,用于处理web套接字,用户浏览器也连接了这些套接字。这将向用户实时发送一份通知,表示他们上传的新图像已准备好与世界共享。
这是关于异步事件驱动编程的真正基本示例。至少我能理解。其他人请纠正我。
我希望这能帮到你。:)
https://stackoverflow.com/questions/15462629
复制相似问题