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-->