私は基本的に、プロセスごとに382スレッドを許可するAmazon EC2サーバーコンパクトインスタンスを使用しています。しかし、単一のプロセスで10,000のスレッドを実行したいと思います。最近、スタックの制限を減らすか、仮想メモリを増やすことでこれを行うことができることがわかりました。
私が知っている限り、LinuxではRAMまたはスワップスペースを増やすことで仮想メモリを増やすことができます。 RAMを増やすことはオプションではありません。スワップスペースを増やす方法を知っていますが、最適なサイズが何であるかわかりません。
私にとって明確ではないのは、スレッドを実行するときにスワップスペースとRAMがどのように機能するかです。メモリ交換によってスレッドが遅くなる特定の制限はありますか?使用するのに最適なスワップスペースはありますか? :
答え1
通常、システム管理者はSWAPを1xまたは2xメモリに設定します。あなたの場合、これが適用可能かどうかわからない。
実行中のアイテムの詳細なしにSWAPに適したサイトが何であるかを知ることは困難ですが、通常、何を実行していてもディスクと交換するとパフォーマンスが低下する可能性があります。ランタイムサイズが増加しました。したがって、クレイジースワッピングを実行する10,000スレッドをコミットする前に、アプリケーションの構成やデザインを調べて他の作業を実行する必要があります。
したがって、アプリケーションをプロファイリングし、アクティブな同時スレッド数を決定すると、それほど実行する必要はないかもしれません。
リクエストに応じてソリューションを提供
WebサイトまたはWebサーバーへの接続を確立すると、応答は順番に受信されるため、特定の接続に送信された要求のリストを維持します。スレッドがサーバーに要求を送信した後、select()
データが利用可能になるまでループで待ちます。これが発生すると、データを受信し、要求情報と受信したデータを別のスレッドに送信して処理します。