이벤트루프 동작원리
Node.js
is a single-threaded event-driven platform that is capable of running non-blocking, asynchronously programming. These functionalities of Node.jsmake it memory efficient.
The event loop
allows Node.js to perform non-blocking I/O operations despite the fact that Javascript is single-threaded. It is done by assigning operations to the operating system whenever and whenever possible.
Most operating systems are multi-threaded and hence can handle multiple operations executing in the background. When one of these operations is completed, the kernel tells Node.js and the respective callback assigned to that operation is added to the event queue which will eventually be executed.
Features of Event Loop:
Event loop
is anendless loop
, which waits for tasks, executes them and sleeps until it receives more tasks.The event loop
executes tasks from theevent queue
only when the call stack is empty i.e. there is no ongoing task.The event loop
allows us to use callbacks and promises.The event loop
executes the tasks starting from the oldest first.
Example:
console.log("This is the first statement"); setTimeout(function() { console.log("This is the second statement"); }, 1000); console.log("This is the third statement");
Output:
This is the first statement This is the third statement This is the second statement
Explanation:
In the above example, the first console log statement is pushed to the call stack
and "This is the first statement" is logged on the console and the task is popped from the stack
. Next, the setTimeout is pushed to the queue
and the task is sent to the Operationg system
and the timer is set for the task.
This task is then popped from the stack
. Next, the third console.log statement is pushed to the call stack
and "This is the third statement" is logged on the console and the task is popped from the stack.
When the timer set by setTimeout function (in this case 1000 ms) runs out, the callback is sent to the event queue.
The event loop on finding the call stack empty takes the task at the top of the event queue
and sends it to the call stack.
The callback function for setTimeout function runs the instruction and "This is the second statement" is logged on the console and the task is popped from the stack.
Note: In the above case, if the timeout was set to 0ms then also statements will be displayed in the same order. This is because although the callback with be immediately sent to the event queue, the event loop won't send it to the call stack
unless the call stack is empty
i.e. until the provided input script comes to an end.
Working of the Event loop:
When Node.js starts, it initializes the event loop, processes the provided input script which may make async API calls, schedule timers, then begins processing the event loop. In the previous example, the initial input script consisted of console.log() statements and a setTimeout() function which schedules a timer.
When using Node.js, a special library module called libuv is used to perform async operations. This library is also used, together with the back logic of Node, to manage a special thread pool called the libuv thread pool. This thread pool
is composed of four threads used to delegate operations that are too heavy for the event loop. I/O operations
, Opening and closing connections
, setTimeouts
are the example of such operations.
When the thread pool completes a task
, a callback function is called which handles the error(if any) or does some other operation. This callback function is sent to the event queue.
When the call stack is empty,
the event goes through the event queue and sends the callback to the call stack.
Diagram of the Event loop in a Node.js server:
Phases of the Event loop:
The following diagram shows a simplified overview of the event loop order of operations:
Timers
:Callbacks scheduled by setTimeout() or setInterval()
are executed in this phase.Pending Callbacks
:I/O callbacks deferred to the next loop iteration
are executed here.Idle, Prepare
: Used internally only.Poll
: Retrievesnew I/O events.
Check
: It invokes setIntermediate() callbacks.Close Callbacks
: It handles some close callbacks. Eg: socket.on('close', ...)
Author And Source
이 문제에 관하여(이벤트루프 동작원리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ragnarok_code/이벤트루프-동작원리저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)