1e41f4b71Sopenharmony_ci# Thread Model (FA Model)
2e41f4b71Sopenharmony_ci
3e41f4b71Sopenharmony_ci
4e41f4b71Sopenharmony_ciThere are three types of threads in the FA model:
5e41f4b71Sopenharmony_ci
6e41f4b71Sopenharmony_ci
7e41f4b71Sopenharmony_ci- Main thread
8e41f4b71Sopenharmony_ci
9e41f4b71Sopenharmony_ci  Manages other threads.
10e41f4b71Sopenharmony_ci
11e41f4b71Sopenharmony_ci- Ability thread
12e41f4b71Sopenharmony_ci  - One ability thread for each ability.
13e41f4b71Sopenharmony_ci  - Distributes input events.
14e41f4b71Sopenharmony_ci  - Draws the UI.
15e41f4b71Sopenharmony_ci  - Invokes application code callbacks (event processing and lifecycle callbacks).
16e41f4b71Sopenharmony_ci  - Receives messages sent by the worker thread.
17e41f4b71Sopenharmony_ci
18e41f4b71Sopenharmony_ci- Worker thread
19e41f4b71Sopenharmony_ci
20e41f4b71Sopenharmony_ci  Performs time-consuming operations.
21e41f4b71Sopenharmony_ci
22e41f4b71Sopenharmony_ciBased on the thread model, different services run on different threads. Service interaction requires inter-thread communication. Threads can communicate with each other in [Emitter](../basic-services/common-event/itc-with-emitter.md) or [Worker](../arkts-utils/worker-introduction.md) mode. Emitter is mainly used for event synchronization between threads, and Worker is mainly used to execute time-consuming tasks.
23e41f4b71Sopenharmony_ci
24e41f4b71Sopenharmony_ci> **NOTE**
25e41f4b71Sopenharmony_ci>
26e41f4b71Sopenharmony_ci> The FA model provides an independent thread for each ability. Emitter is mainly used for event synchronization within the ability thread, between a pair of ability threads, or between the ability thread and worker thread.
27e41f4b71Sopenharmony_ci
28e41f4b71Sopenharmony_ci <!--no_check-->