どちらも、独自の方法で複雑で複雑になる可能性があります。
どちらでも構いません。物事の壮大な計画では、どちらを選択してもかまわないかもしれません。重要なのは、それらをどれだけうまく行うかです。したがって:
あなたが最も経験したことをしてください。または、チームを率いる場合は、チームが最も経験を積んでいることを行います。
---スレッディング!---
私は多くのスレッド化プログラミングを行ってきましたが、楽しんでいる部分とそうでない部分があります。私は多くのことを学び、今ではたいてい苦労せずにマルチスレッド アプリケーションを作成できますが、非常に特殊な方法で作成する必要があります。すなわち:
1) 100% スレッド セーフな非常に明確に定義されたデータ境界で記述される必要があります。そうしないと、発生する可能性のある状況が発生する可能性があり、デバッガーが配置されている場合は発生しない可能性があります.さらに、スレッド化されたコードのデバッグは、シュレディンガーの箱を覗き込むようなものです...そこを見ると、他のスレッドがもっと処理する時間がありました。
2) マシンに負荷をかけるテスト コードを記述する必要があります。多くのマルチスレッド システムでは、マシンに大きな負荷がかかっている場合にのみバグが発生します。
3) データ交換コードを所有している非常に賢い人がいるに違いありません。ショートカットを作成する方法があれば、開発者が作成する可能性があり、誤ったバグが発生する可能性があります。
4) 最小限の手間でアプリケーションをリセットする包括的な状況が必要です。これは、スレッドの問題が原因で壊れた製品コード用です。要するに、ショーは続けなければなりません。
- -クロスプロセス! - -
私はプロセスベースのスレッド化の経験はあまりありませんが、最近 Windows でいくつかのクロスプロセス処理を行っています (ここで、IPC は Web サービスの呼び出しです... うわー!)、比較的クリーンでシンプルですが、いくつかの規則に従います。ここでも。プログラムは外部からの入力を非常にうまく受け取るため、概して、プロセス間通信ははるかにエラーのないものになります..そして、それらのトランスポートメカニズムは通常非同期です。ともかく...
1) 明確なプロセス境界と通信メカニズムを定義します。国境が明確で、それらの境界に多くの検証およびエラーチェックコードがある限り、TCP、Web サービス、またはパイプなどを介したメッセージ/イベント処理は問題ありません。
2) ボトルネックに備える。コードの寛容性は非常に重要です。つまり、そのパイプに書き込めない場合があります。アプリケーションがロックアップしたり例外を投げたりすることなく、これらのメッセージを再キューイングして再試行できる必要があります。
3) プロセスの境界を越えてデータを転送するということは、何らかの方法でシリアル化する必要があることを意味するため、一般的にはより多くのコードが存在します。これは、特にそのコードの保守と変更を開始するときに、問題の原因になる可能性があります。
お役に立てれば。