3

我有一个 HTTP 服务器,它做一些 IO 的东西,然后做一些 CPU 绑定的东西(PIL),然后回复数据(兆字节左右)。

(a) 我的第一个想法是这样的:一个基于 Twisted 的服务器和 IO 进程,以及几个用于 PIL 东西的进程,带有队列。

如果这种架构是合理的,那么可能有一个库可以做到这一点:Twisted 的多进程队列。但是,我在 Twisted 中并没有真正的经验,对它的社区一无所知,所以我发现的唯一东西是ampoule,我没有找到文档和描述来说服我它是工作的正确工具。

(b) 另一个想法是只在几个线程中运行多个服务器,IO 和 CPU 的东西都在它们中。这似乎很愚蠢,因为 CPU 的东西会阻塞,但也许我并没有真正理解它。

所以,问题:

  1. 这些架构中的任何一个合理吗?
  2. 你将如何实现它(使用Twisted+ampoule或什么?)
  3. 对于(a),您将如何将大量数据从“worker”发送到服务器线程?或者我可以告诉工作人员以某种方式直接写入响应?
  4. 多少“工人”是合理的?
4

1 回答 1

1
  1. 是的,这些架构可能是合理的
  2. 我可能也会使用安瓿,但我现在也不太了解它。这个链接是我记得看到的最接近一个好的介绍的东西。
  3. 由于听起来您的工作人员将始终在同一台机器上,因此您应该能够使用共享内存。
  4. 这在很大程度上取决于您可用的内核数量以及工作的密集程度(包括 CPU 时间和其他资源,如内存和磁盘)。可能很难给出比“每个核心大约 1-5 个进程进行基准测试,看看什么是最快的”更好的答案。
于 2012-07-11T23:17:52.433 回答