1# Thread Model (Stage Model)
2
3## Thread Type
4There are three types of threads in the stage model:
5- Main thread
6  - Draws the UI.
7  - Manages the [ArkTS engine](../arkts-utils/arkts-runtime-overview.md) instance of the main thread so that multiple UIAbility components can run on it.
8  - Manages [ArkTS engine](../arkts-utils/arkts-runtime-overview.md) instances of other threads, for example, using **TaskPool** to create or cancel tasks, and starting and terminating **Worker** threads.
9  - Distributes interaction events.
10  - Processes application code callbacks (event processing and lifecycle management).
11  - Receives messages sent by the **TaskPool** and **Worker** threads.
12- [TaskPool Worker Thread](../reference/apis-arkts/js-apis-taskpool.md)
13
14  Used for time-consuming operations and provides APIs for setting the scheduling priority and load balancing. It is recommended.
15- [Worker Thread](../reference/apis-arkts/js-apis-worker.md)
16
17  Used for time-consuming operations and supports inter-thread communication.
18For details about the operation mechanism, communication method, and usage of **TaskPool** and **Worker**, see [Comparison Between TaskPool and Worker](../arkts-utils/taskpool-vs-worker.md).
19
20![thread-model-stage](figures/thread-model-stage.png)
21
22> **NOTE**
23>
24> - **TaskPool** manages the number of threads that can be created and their lifecycle. However, you need to maintain the lifecycle of [Worker](../arkts-utils/worker-introduction.md) threads.
25> - Multiple components can exist in the same thread. For example, both UIAbility and UI components exist in the main thread. In the stage model, [EventHub](#using-eventhub-for-intra-thread-communication) is used for data communication.
26> - To view thread information about an application process, run the **hdc shell** command to enter the shell CLI of the device, and then run the **ps -p *\<pid>* -T command**, where *\<pid>* indicates the [process ID](process-model-stage.md) of the application.
27
28## Using EventHub for Intra-Thread Communication
29
30[EventHub](../reference/apis-ability-kit/js-apis-inner-application-eventHub.md) provides APIs for sending and processing events in threads, including subscribing to, unsubscribing from, and triggering events. [Using EventHub for Data Synchronization](uiability-data-sync-with-ui.md#using-eventhub-for-data-synchronization) describes the development procedure by using data synchronization between the UIAbility component and the UI as an example.
31