2016-06-21 3 views
0

私はMoxa Nport'sを使用しています。約200の仮想シリアル(COM)ポートを作成し、イーサネット経由でコンピュータに接続します。シリアルポートを開いて読み書きする最大スレッド数MOXA NPort

SerialPortクラスを使用してデバイスと通信するアプリケーションを構築しています。

私の質問:ポートを開くために並列で実行できるスレッドの最大数はありますか?もちろん、ポート経由で並行して通信することはできますか? 自分のコンピュータがハングしないでこのプロセスを安全に繰り返すことができるように、何を考慮に入れなければならないか(RAM、トラフィックなど)

私はthis答えを見つけましたが、コアに関する計算操作に関してのみ役立ちます。しかし、仮想シリアルポートではどのように動作しますか?

私とあなたの知識や知恵を共有してください...

+0

私はシリアルポートとの通信に関する実務経験もあります。しかし、ポートを開くためにスレッドを並行して実行する必要はありません。 –

+0

どのくらいのタイムアウトを設定しますか? –

+1

年前私は、プロセッサコアごとに25スレッドのマイクロソフトサイトで「経験則」を読んだ。それはもう本当だとは確信していません。 – Kevin

答えて

-1

SerialPortは一度だけ、ポートごとに開くことができます。したがって、この場合、すべてのスレッドは同じSerialPortオブジェクト(静的、多分)を共有する必要があります。複数のポートを持つ場合、各スレッドは別のポートに独自のSerialPortを作成できます。スレッドの最大数は、各スレッドが必要とするリソースに依存します。あなたの200ポートのための200スレッドは、一般的に非常に合理的です。結局のところ、ほとんどの場合、I/Oスレッドはwaiting(またはblocked)の状態です。一度に200個のポートをすべて開くには、20個のスレッドを500 msのタイムアウトで起動し、次に20個のスレッドを並行して起動する方がよいと思います。一度に同じドライバと通信する200のスレッドを作成すると、問題が発生する可能性があります。IMHO

+0

そして、200のポートがあるとき、質問のように言ったのですか? –

+0

ええ、それは私が思ったものですが、私のコンピュータは一気にそれらを開くための15回の試みのうち3回死んでいます。このようなパフォーマンスは残念ながら受け入れられません。 –

+0

@MongZhu "死ぬ"とはどういう意味ですか?お使いのコンピュータ(RAM、CPU、..)の仕様は何ですか?これらの3回のエラーメッセージは何ですか? – AhmadWabbi

関連する問題