Przejdź do treści głównej

Model wątków

Nieoficjalne Tłumaczenie Beta

Ta strona została przetłumaczona przez PageTurner AI (beta). Nie jest oficjalnie zatwierdzona przez projekt. Znalazłeś błąd? Zgłoś problem →

Nieoficjalne Tłumaczenie Beta

Ta strona została przetłumaczona przez PageTurner AI (beta). Nie jest oficjalnie zatwierdzona przez projekt. Znalazłeś błąd? Zgłoś problem →

ostrzeżenie

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:

Threading model symbols

Scenariusze renderowania

Renderowanie w wątku JS

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

Threading model use case one

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.

Threading model use case two

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.

Threading model use case three

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.

Threading model use case four

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.

Threading model use case six