Model wątków
Ta strona została przetłumaczona przez PageTurner AI (beta). Nie jest oficjalnie zatwierdzona przez projekt. Znalazłeś błąd? Zgłoś problem →
Ta strona została przetłumaczona przez PageTurner AI (beta). Nie jest oficjalnie zatwierdzona przez projekt. Znalazłeś błąd? Zgłoś problem →
Ten dokument odnosi się do Nowej Architektury, która jest obecnie w trakcie wdrażania.
Renderer React Native rozdziela pracę potoku renderowania pomiędzy wiele wątków.
Tutaj definiujemy model wątkowości i przedstawiamy przykłady ilustrujące wykorzystanie wątków w potoku renderowania.
Renderer React Native został zaprojektowany jako bezpieczny wątkowo. Na wysokim poziomie bezpieczeństwo wątków zapewnia użycie niemutowalnych struktur danych wewnątrz frameworka (wymuszone przez funkcję "const correctness" w C++). Oznacza to, że każda aktualizacja w React tworzy lub klonuje nowe obiekty w rendererze zamiast modyfikować istniejące struktury danych. To pozwala frameworkowi udostępniać bezpieczne wątkowo i synchroniczne API dla Reacta.
Renderer wykorzystuje dwa różne wątki:
-
Wątek UI (często nazywany głównym): Jedyny wątek, który może manipulować widokami hosta.
-
Wątek JavaScript: To tutaj wykonywana jest faza renderowania Reacta oraz obliczenia układu.
Przeanalizujmy obsługiwane scenariusze wykonania dla każdej fazy:

Scenariusze renderowania
Renderowanie w wątku JS
To najczęstszy scenariusz, w którym większość potoku renderowania odbywa się w wątku JavaScript.

Renderowanie w wątku UI
Gdy w wątku UI występuje zdarzenie o wysokim priorytecie, renderer może wykonać cały potok renderowania synchronicznie w tym wątku.

Domyślne lub ciągłe przerywanie zdarzeń
Ten scenariusz pokazuje przerwanie fazy renderowania przez zdarzenie o niskim priorytecie w wątku UI. React i renderer React Native mogą przerwać fazę renderowania i połączyć jej stan z niskopriorytetowym zdarzeniem wykonanym w wątku UI. W tym przypadku proces renderowania kontynuuje wykonanie w wątku JS.

Dyskretne przerywanie zdarzeń
Faza renderowania jest przerywalna. Ten scenariusz pokazuje przerwanie fazy renderowania przez zdarzenie o wysokim priorytecie w wątku UI. React i renderer mogą przerwać fazę renderowania i połączyć jej stan z wysokopriorytetowym zdarzeniem wykonanym w wątku UI. Faza renderowania wykonuje się synchronicznie w wątku UI.

Aktualizacja stanu w C++
Aktualizacja inicjowana w wątku UI, która pomija fazę renderowania. Więcej szczegółów w Aktualizacje stanu renderera React Native.
