このプロセスは、ハイディスク IO 操作ではなく、ハイ CPU およびハイメモリ操作であるため、つまり、このプロセスは CPU のパフォーマンスをテストします。そして、コンピューターには実際のマルチプロセスやマルチスレッドが存在せず、それらはすべて CPU スケジューリングを通じてシミュレートされることがわかっています。したがって、高い CPU を使用する操作の場合は、単一プロセスまたは単一スレッドの方法を使用するのが最適です (マルチコアの方が増加すると考えられます)。これは、前後の切り替えによる消費を回避できるため、最も効率的な方法です。スレッドまたはプロセス間。
このプロセスは、ハイディスク IO 操作ではなく、ハイ CPU およびハイメモリ操作であるため、つまり、このプロセスは CPU のパフォーマンスをテストします。そして、コンピューターには実際のマルチプロセスやマルチスレッドが存在せず、それらはすべて CPU スケジューリングを通じてシミュレートされることがわかっています。したがって、高い CPU を使用する操作の場合は、単一プロセスまたは単一スレッドの方法を使用するのが最適です (マルチコアの方が増加すると考えられます)。これは、前後の切り替えによる消費を回避できるため、最も効率的な方法です。スレッドまたはプロセス間。
これについては、Nginx のアーキテクチャを参照してください。Nginx の高負荷も単一プロセスで完了します。
CPython のマルチスレッドは「実際の」マルチスレッドではありません (詳細については GIL を参照)。言語を変更しない場合、解決策は負荷分散 (haproxy など) を使用してマルチプロセスにすることです。フロント。
同時接続を処理するには複数のモデルがあります。マルチスレッドも一種であり、epollに代表されるノンブロッキングI/O+多重化も一種です。正しく使用されている限り、新しい接続が確立された後の読み取り/書き込みは、たとえ短時間であってもブロックされません。
初期のベテラン ドライバーは、さまざまな同時処理モデルを説明した Dan Kegel の The C10K 問題を読んだことがあります。あなたの英語がまあまあであれば、読んでみることをお勧めします。ああ、ところで、大規模な同時実行を処理するために実際のシステムで行われたさまざまな技術的拡張を含まない概念を学習している場合は、Richard Stevens の「Unix Network Programming」の方がより明確に説明されており、中国語訳も簡単に理解できます。読む。 。