3

ネットワーク プログラミングを行う場合、マルチプロセス、マルチスレッド、または選択/ポーリング (epoll) を使用していても、同じポートで接続を受け入れるプロセス/スレッドは 1 つしかありません。また、マルチコアを利用したい場合は、ワーカー プロセス/スレッドを作成する必要があります。しかし、境界はネットワーク接続を扱っているのでしょうか? ネットワーク接続を扱うときにマルチコアを利用する方法はありますか?

いくつかの資料を見つけました。そして、これを完成させるのは難しいようです。スリーウェイ ハンド シェイクは、カーネルによって暗黙的に行われます。また、smp 構造では、オペレーティング システムはいくつかのクリティカル ゾーンに分割されます。同じクリティカル ゾーンを複数のコアで同時に実行することはできません。

4

2 に答える 2

1

PC ハードウェアで実行される最新のオペレーティング システムはすべて、マルチコア CPU 向けに高度に最適化されたネットワーク スタックを既に備えています。たとえば、ネットワーク カードとの間でデータをやり取りするパケット処理コードは、TCP/IP スタック コードとは独立しているため、TCP コードを妨害することなくハードウェア割り込みを最後まで実行できます。

ただし、ほとんどの実際のアプリケーションでは、作業の大部分はパケット間で行われます。入ってくるデータを処理し、出て行くデータを生成する必要があります。それはアプリケーション コード次第であり、そのコードは、複数のスレッドまたは複数のプロセスを使用して、複数のコアを利用できます。どのように最善を尽くすかは、アプリケーションとオペレーティング システムによって異なります。たとえば、Windows には、ジョブ検出とマルチスレッド ジョブ ディスパッチを組み合わせたI/O 完了ポートがあります。Linux にはepollがあります。

于 2011-09-13T16:01:42.690 に答える
0

ネットワーク トラフィックだけでは、ネットワーク カード (つまり、コンピュータの CPU ではありません) によってほとんど処理されます。ネットワーク カードとの通信は通常、シングル スレッドです (複数のスレッドで送受信できるように OS によってキューに入れられます)。

受信したデータに応じて必要なことを行うのは、プロセス次第です。これは 1 つのスレッドで実行でき、そのマスター スレッドでデータを受信すると他のスレッドを生成し、そのように作業を分割できます。非同期通信をサポートする言語をお持ちの場合は、複数のスレッドを使用してほとんどの作業を実行できるようにします。

于 2011-07-11T20:57:23.910 に答える