LabVIEWのスレッディングモデル
- 更新日2025-08-27
- 3分で読める
スレッド管理の複雑なタスクはすべて、目に見えない形でLabVIEW実行システムに組み込まれています。テキストベースのプログラミングでマルチスレッドアプリケーションを作成するには、複雑なプログラミングの方法を新たに習得する必要があります。一方、LabVIEWアプリケーションはすべて自動的にマルチスレッド化されているため、コードを変更する必要がありません。
LabVIEWでは、オペレーティングシステムの割り込み型マルチタスクのほか、協調型マルチタスクシステムを採用しています。コンパイル処理の間、LabVIEWはVIを解析して、クランプで同時に実行できるノードのグループを検出します。優先度と実行システムの各組み合わせには、同時に実行できるクランプを保持する実行キューデータのストラクチャが含まれます。実行システムは、スレッドをアクティブにする時、実行キューからクランプを回収して実行します。実行システムが実行を終了すると、入力条件を満たす他のクランプを実行キューに格納します。これによって、ブロックダイアグラムの任意の実行スレッドでの実行が可能となります。ブロックダイアグラムの並列性が高ければ、すべてのスレッドで同時に実行できます。
コードのクランプは恒久的に特定のスレッドに割り当てられるわけではありません。次回のVI実行時に、異なるスレッドを使用してクランプを実行することができます。
LabVIEWは、たとえば以下の図でそれぞれの赤い四角形で囲まれたノードをクランプとしてグループ分けします。
このブロックダイアグラムでは、3つの異なるクランプがあるといえます (制御器のクランプと表示器のクランプは同一であるため)。つまり、制御器/表示器クランプは2回実行されます。クランプは、実行前および実行後はスリープ (遅延) 状態となります。一番左の最初のクランプは、実行後は2つのForループのクランプが実行される間スリープ状態となります。VIの表示器のクランプの実行準備が整うと、左右のクランプのスリープ状態が解除されます。