2

Erlang ポートとスレッド セーフ

「しかし、ポートでは、「制御プロセス」はシリアライゼーション (一連に配置されたものとして) レイヤーとして機能します。つまり、リクエストは一度に処理されるのではなく、次々に処理されます。さらに、私は信じています (しかし、確実にはわかりません) ) 通信プロトコル ポートが使用するこのシリアル実行も必要です。"

それぞれが同じ C ドライバーに接続されている多数の Erlang ポート プロセスを起動した場合、C コードが並列 Erlang プロセスによって直列または並列で実行されるかどうかは誰にもわかりませんか? (シリーズだと思います)

どうも

4

1 に答える 1

1

Erlangはポートを介したプログラム通信のみを記述し、コード実行は記述しません。シリアライゼーションのポイントが 1 つあり、すべての通信が 1 つのアクターを介して行われますが、それは一般的に作業を配布できないという意味ではありません。単一ポートでも、C プログラムを自由に並列化できます。

ポートはパイプとして実装されているため、シリアル通信が必要です。しかし、互いに完全に独立して動作する多くの通信パイプを自由に開くことができます。

これは、異なるポートが独立し、独立したポートを介したすべての通信が並列になることを意味します

ただし、beam は、コードが実行されるスレッド プールの能力が限られています。ポートとのすべての通信イベントは、データ送信時にスレッドを使用します。多くのポートがあり、大量のデータを送信する場合、この時間が重要になる可能性があるため、ポートが互いに影響を及ぼし始めます。その場合、IO およびポート通信に使用される非同期スレッドの量を増やす必要がある場合があります。

于 2015-04-25T10:09:10.453 に答える