0

QEventLoop (QProcess?) を使用して、Qt で同じ関数への複数の呼び出しを並列化できるかどうか疑問に思います。QtConcurrent または QThread との正確な違いは何ですか? より正確には、プロセスとイベント ループとは何ですか? QCoreApplication は main() メソッドでできるだけ早く exec() する必要があると読んだので、なぜそれがメイン スレッドと異なるのか疑問に思います。

Qt を使用したプロセスとスレッドへの効率的な参照として指摘できますか? 私は公式ドキュメントを読みましたが、それらのことは不明のままです。

ありがとうございます。

4

1 に答える 1

4

プロセスとスレッドは Qt 固有の概念ではありません。その違いを説明するために、どこでも「プロセスとスレッド」を検索できます。例:スレッド間で共有されるリソースは?

関連する概念ではありますが、新しいプロセスを生成することは、既存のプロセス内で新しいスレッドを生成することよりも、並列処理の「重い」形式です。プロセスはデフォルトで互いに保護されていますが、プロセスの実行スレッドは互いのメモリを直接読み書きできます。プロセスの生成から得られる保護は、実行時のコストが高くなります...独立したプロセスは互いのメモリを読み取ることができないため、プロセス間通信の方法を使用してプロセス間でデータを共有する必要があります。

プログラム内のすべてのコードを記述している場合は、スレッドの方が簡単に使用できるため、スレッドが必要になる可能性があります。マルチスレッド プログラミングのすべての複雑さを考えると、まず良い本を読むか、いくつかの Web サイトを読むことをお勧めします。参照:スレッド化プログラミングを学習するための優れたリソースは何ですか?

しかし、Qt でのスレッド化がどのように見えるかを知りたい場合は、例を見て時間を費やすことができます。

http://qt-project.org/doc/qt-4.8/examples-threadandconcurrent.html

QtConcurrent は、ある種の並列プログラミング パターンの実装を容易にする抽象化ライブラリです。これは QThread の抽象化の上に構築されており、QThread に直接書き込むことによって自分でコーディングできなかったことは何もありません。ただし、コードの記述が容易になり、エラーが発生しにくくなる可能性があります。

イベントループに関しては...これは、プログラム内の特定の実行スレッドが作業項目の処理を待機し、それらを処理し、いつそれが不要になるかを判断できる方法の単なる一般的な用語です。スレッドのジョブが単に開始し、計算を行い、終了するだけであれば、イベント ループは必要ありません。ただし、スレッドの開始と停止には時間がかかり、リソースが大量に消費されます。そのため、通常、スレッドはより長い期間存続し、応答する必要があるイベントを待機する方法を知っているイベント ループを持っています。

QtConcurrent の上に構築する場合、ワーカー スレッドはスレッド プールで自動的に管理されるため、ワーカー スレッドのイベント ループについて心配する必要はありません。ワードカウントの例は非常に簡単です。

http://qt-project.org/doc/qt-4.8/qtconcurrent-wordcount-main-cpp.html

于 2012-04-10T15:06:37.200 に答える