3

私はいくつかのIO処理を実行し、次にいくつかのCPUバウンド処理(PIL)を実行し、データ(メガバイト程度の大きさ)で応答するHTTPサーバーを持っています。

(a)私の最初のアイデアは、次のようなものです。Twistedに基づくサーバーとIOのプロセス、およびキューを使用したPILのもののいくつかのプロセス。

このアーキテクチャが妥当な場合は、おそらくそれを正確に実行するライブラリがあります。Twistedのマルチプロセスキューです。しかし、私はTwistedの経験があまりなく、そのコミュニティについて何も知らないので、私が見つけたampouleのは、それが仕事に適したツールであると私を説得するドキュメントも説明も見つからなかったということだけです。

(b)もう1つのアイデアは、複数のサーバーを複数のスレッドで実行し、IOとCPUの両方をそれぞれに実行することです。CPUのものがブロックされるので、これはばかげているように見えますが、多分私はそれを本当に理解していません。

だから、質問:

  1. これらのアーキテクチャのいずれかが合理的ですか?
  2. どのように実装しますか(Twisted+ampouleまたは何を使用しますか?)
  3. (a)の場合、「ワーカー」からサーバースレッドに大量のデータをどのように送信しますか?それとも、どういうわけか直接応答に書き込むようにワーカーに指示できますか?
  4. 何人の「労働者」が合理的ですか?
4

1 に答える 1

1
  1. はい、それらのアーキテクチャはおそらく合理的です
  2. アンプルも使ってみたいけど、今はよく分からない。このリンクは、私が覚えている優れた紹介に最も近いものです。
  3. ワーカーは常に同じマシン上にあるように見えるので、共有メモリを使用できるはずです。
  4. これは、使用可能なコアの数と、作業の集中度 (CPU 時間とメモリやディスクなどの他のリソースの両方に関して) に大きく依存します。「コアあたり約 1 ~ 5 のプロセスでベンチマークを行い、最速のものを確認する」よりも優れた答えを出すのはおそらく難しいでしょう。
于 2012-07-11T23:17:52.433 に答える