2012-07-08 120 views
2

我有一個HTTP服務器,它執行一些IO的東西,然後做一些CPU綁定的東西(PIL),然後用數據(大小爲兆字節左右)回覆。 (a)我的第一個想法是這樣的:一個基於Twisted的服務器和IO進程,以及幾個PIL進程,帶有隊列。扭曲CPU隊列任務的隊列

如果這個體系結構是合理的,那麼可能有一個庫確實做到了這一點:Twisted的多進程隊列。然而,我對Twisted並不是很有經驗,對其社區一無所知,因此我發現的唯一的事情就是ampoule,對此我找不到任何文檔或描述,這些文檔或描述都不會說服我,它是適合工作的正確工具。 (b)另一個想法是在多個線程中運行多個服務器,IO和CPU都在其中運行。這似乎很愚蠢,因爲CPU的東西會阻止,但也許我不是很瞭解它。

所以,問題:

  1. 是這些架構是否合理?
  2. 你將如何實現它(使用Twisted + ampoule還是什麼?)
  3. 對於(一),你會怎麼發從「工人」數據的一大堆服務器線程?或者,也許我可以告訴工作人員直接以某種方式寫入回覆?
  4. 有多少「工人」是合理的?

回答

1
  1. 是,這些架構可能是合理的
  2. 我可能會使用安瓿過,但我不知道了很多關於它現在要麼。 This link是我記得看到的最好的介紹。
  3. 由於聽起來您的工作人員總是在同一臺計算機上,因此您應該可以使用共享內存。
  4. 這很大程度上取決於您可用的內核數量和工作量(包括CPU時間和其他資源,如內存和磁盤)。 「比較每個核心的1-5個進程的基準數量,並看看最快的數據」,可能很難給出任何答案。