首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异步任务队列和异步IO

异步任务队列和异步IO
EN

Stack Overflow用户
提问于 2016-04-09 14:50:11
回答 2查看 2.1K关注 0票数 7

据我所知,异步网络框架/库(如扭曲、龙卷风和异步)通过实现非阻塞套接字和事件循环提供异步IO。Gevent通过猴修补标准库基本上实现了相同的功能,因此不需要通过回调和协同进行显式异步编程。

另一方面,异步任务队列,如芹菜,管理后台任务,并将这些任务分布在多个线程或机器上。我不完全理解这个过程,但它涉及到消息代理、消息和工作人员。

我的问题

  1. 异步任务队列是否需要异步IO?他们有什么关系吗?这两个概念似乎相似,但应用程序级别的实现是不同的。我认为他们唯一的共同之处就是“异步”这个词,所以这也许是在抛弃我。
  2. 有人能详细说明任务队列是如何工作的,消息代理(为什么是必需的?)、工作人员和消息(什么是消息)之间的关系吗?字节?)。

哦,我不是想解决任何具体的问题,我只是想了解异步任务队列和异步IO背后的想法。

EN

回答 2

Stack Overflow用户

发布于 2016-04-09 15:12:25

异步IO是一种在不阻塞的情况下使用套接字(或更一般的文件描述符)的方法。这个术语是特定于一个进程甚至一个线程的。您甚至可以想象将线程与异步调用混合在一起。这将是完全好的,但有点复杂。

现在我不知道asynchronous task queue是什么意思了。IMHO只有一个任务队列,它是一个数据结构。您可以以异步或同步方式访问它。所谓“访问”,我指的是pushpop调用。它们可以在内部使用网络。

因此任务队列是一种数据结构。(A)同步IO是访问它的一种方法。这就是它的全部。

如今,asynchronous这个词被过度使用了。炒作是真的。

至于你的第二个问题:

  1. 消息只是一组数据,一个字节序列。它可以是任何东西。通常这些是一些结构化的字符串,比如JSON。
  2. 任务==消息。不同的单词用于通知数据的用途:执行某些任务。例如,您将发送一条消息{"task": "process_image"},您的使用者将触发一个适当的函数。
  3. 任务队列Q只是一个队列(数据结构)。
  4. 生产者P是将消息推送到Q的进程/线程/类/函数/东西。
  5. 使用者(或工作人员)C是一个进程/线程/类/函数/东西,它弹出来自q的消息并对其进行一些处理。
  6. messages是一个重新分发消息的进程。在这种情况下,生产者P向B发送消息(而不是直接发送到队列),然后B可以(例如)复制此消息并发送到两个不同的队列-- Q1和Q2,以便两个不同的工作人员-- C1和C2 --将得到该消息。消息代理还可以充当协议翻译器,可以转换消息、聚合消息并做许多事情。一般来说,这只是生产者和消费者之间的一个黑匣子。

正如你所看到的,这些东西没有正式的定义,你必须用一些直觉来充分理解它们。

票数 3
EN

Stack Overflow用户

发布于 2016-04-09 14:59:09

异步任务或芹菜任务只是异步执行的任务。特别是芹菜,任务由多个工作人员执行,从而充分利用线程、多处理以及分布式节点的好处。因此,在某种程度上,我们可以通过使用像multiprocessingmultithreading这样的库轻松地完成芹菜的工作,但是使用芹菜的好处是它可以自行处理所有的复杂性。

现在,同步IOmultithreadingmultiprocessing非常不同。Aync适用于IO绑定的任务(而不是CPU)。它只使用单线程同时执行多个IO请求。Geventasyncio (在python 3的情况下)有助于实现这一点。

  1. 芹菜-适合不需要实时的任务。
  2. 多处理-理想的任务是CPU绑定。
  3. Asyncio/Gevent -适用于IO绑定的任务
  4. 多线程-由于Python中固有的全局解释器锁定,在CPU绑定程序中用处不大。如果是IO绑定程序,我相信asyncio是一个更好的选择。
  5. 龙卷风-异步执行IO请求的框架。
  6. 扭曲-一个网络框架,它除了提供异步IO之外,还提供了许多功能。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36518400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档