Popularized by the NodeJS language, this model is based on event-driven programming. There are two central concepts: the events which will be enqueued on a queue, and the handlers which keep track of and process these events.
There are some advantages of adopting this model. The first one is the ordering. The events are enqueued and dispatched in the same order in which the events are coming. In some uses cases, this is an important requirement.
The other one is the synchronization. The event-loop must be executed on only one thread. This makes the states easy to handle and avoids the shared state problems.
There is an important piece of advice here. The handlers must not be synchronous. Otherwise, the application will be ...