> For the complete documentation index, see [llms.txt](https://manual.karamba3d.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://manual.karamba3d.com/jp/2-hajimekata/2-getting-started-1/2.6-asynchronous-execution-of-karamba3d-components.md).

# 2.6 Karamba3Dコンポーネントの非同期実行

Grasshopperにおける非同期 (asynchronous, async) 実行とは、コンポーネントがメインの計算スレッドをブロックせずにデータを独立して同時並行的に処理する機能を指します。Grasshopperの従来の同期実行モデルでは、各コンポーネントが出力を順次計算するため、ダウンストリームのコンポーネントが計算を開始する前に、すべてのアップストリームのコンポーネントが計算を完了する必要がありました。これにより、特に計算量の多いタスクを扱う際に遅延と非効率が生じる可能性がありました。

Karamba3Dでは、非同期実行は**Karamba3Dメニュー**の「**Settings > Async Execution**」から切り替えることができます。デフォルトでは、このオプションは無効になっています。

Karamba3Dの非同期コンポーネントは、[Speckle Systems](https://www.speckle.systems/) によって開発された[`GrasshopperAsyncComponent`](https://github.com/specklesystems/GrasshopperAsyncComponent) フレームワークを利用しています。このアーキテクチャは、非同期コンポーネントの実行プロセスを2つの異なる段階に分けます:

* **データ取得**\
  この初期段階では、新しく計算されたデータは出力されません。これは、Galapagosなど、Grasshopper定義の一部を反復的に処理するコンポーネントに課題をもたらします。この制限により、ループや最適化の実行中はKaramba3Dコンポーネントの非同期実行を無効にする必要があります。
* **データ処理**\
  必要なデータが取得されると、処理は独立して行われ、特定のコンテキストでパフォーマンスが向上します。

{% hint style="info" %}
**最適化の実行（例: Galapagosでの実行）またはループを行う際は、非同期実行を無効にしてください。**
{% endhint %}

#### Karamba3Dの非同期対応コンポーネント

Karamba3Dでは、以下のコンポーネントが非同期実行をサポートします:

* **AssembleModel**
* すべての **Algorithms** コンポーネント
* **ModelView**、**BeamView**、**ShellView**
* **LineResultsOnShells**
* **MeshBreps**
* **Shell Section**

#### 機能と考慮事項

Karamba3Dの非同期コンポーネントには、主な機能拡張とオプションがあります:

* **応答性の向上**\
  非同期コンポーネントはUIスレッドと並行して実行されるため、計算中にインターフェイスが固まることを防ぎます。
* **コンテキストメニュー (context menu) のオプション**\
  非同期対応コンポーネントには、コンテキストメニューに2つの追加項目が含まれます:
  * **Cancel**: 実行中のコンポーネントを停止します。
  * **Parallel Execution**: コンポーネントが受信データを並列に処理できるようにします。

#### 並列実行に関する注意事項

並列実行はパフォーマンスを向上させる可能性がありますが、Karamba3Dのアルゴリズムはすでに並列処理向けに高度に最適化されています。コンテキストメニューの「Parallel Execution」を介して追加の並列レイヤーをアクティブ化すると、**過剰並列化**につながり、改善ではなくパフォーマンスの低下を引き起こす可能性があります。ユーザーは、特定の計算ニーズに基づいて慎重にこの機能を有効化することが推奨されます。
