スレッディングモデル
このドキュメントは、現在展開中の新しいアーキテクチャに関するものです。
React Native レンダラーは、レンダーパイプラインの作業を複数のスレッドに分散させます。
ここでは、スレッドモデルを定義し、レンダーパイプラインのスレッド使用状況を説明する例をいくつか示します。
React Native レンダラーはスレッドセーフになるように設計されています。高いレベルでは、フレームワークの内部で不変データ構造を使用することでスレッドセーフティが保証されています(C++ の「const correctness」機能によって強制されます)。これは、React でのすべての更新が、データ構造を更新する代わりに、レンダラーで新しいオブジェクトを作成またはクローンすることを意味します。これにより、フレームワークはスレッドセーフで同期的な API を React に公開できます。
レンダラーは2つの異なるスレッドを使用します
- UI スレッド(メインと呼ばれることが多い):ホストビューを操作できる唯一のスレッド。
- JavaScript スレッド:React のレンダーフェーズとレイアウトが実行される場所。
各フェーズのサポートされている実行シナリオを確認しましょう。

レンダーシナリオ
JS スレッドでのレンダー
これは、レンダーパイプラインのほとんどが JavaScript スレッドで発生する最も一般的なシナリオです。

UI スレッドでのレンダー
UI スレッドで優先度の高いイベントが発生した場合、レンダラーはすべてのレンダーパイプラインを UI スレッドで同期的に実行できます。

デフォルトまたは連続イベントの中断
このシナリオは、UI スレッドでの優先度の低いイベントによるレンダーフェーズの中断を示しています。React と React Native レンダラーは、レンダーフェーズを中断し、その状態を UI スレッドで実行される優先度の低いイベントとマージすることができます。この場合、レンダープロセスは JS スレッドでの実行を継続します。

離散イベントの中断
レンダーフェーズは中断可能です。このシナリオは、UI スレッドでの優先度の高いイベントによるレンダーフェーズの中断を示しています。React とレンダラーは、レンダーフェーズを中断し、その状態を UI スレッドで実行された優先度の高いイベントとマージすることができます。レンダーフェーズは UI スレッドで同期的に実行されます。

C++ 状態更新
UI スレッドで発生し、レンダリングフェーズをスキップする更新。詳細については、React Native レンダラーの状態更新を参照してください。
