SlideShare a Scribd company logo
NODE.JS
aysnc & Single thread
lahuman
1
Single Thread??!
nodejs는 Single Thread로 동작하지만,
Asynchronous I/O(libuv) 를지원합니
다.
2
What APIs use which async mechanism?
Kernel Async
TCP/UDP server and clients, pipes, dns.sresolveXXX
Thread Pool
fs.*, dns.lookup, pipes
NIX Only
UNIX domain sockets, TTY input, NIX signals
Windows Only
Child Process, TTY input, TCP servers
3
How to work on libuv ?
libuv 는 운영체제의 커널을 추상화해서 비동기 API를 지원
libuv 의 비동기 API를 처리 방식
커널이 지원하는 비동기 작업을 libuv 에게 요청하면 libuv 는 대신 커널에
게 이 작업을 비동기적으로 요청
커널이 지원하지 않는 비동기 작업을 libuv 에게 요청하면 livuv 는 내부에
가지고있는 스레드 풀에게 이 작업을 요청
4
What is libuv ?
libuv 라는 Asynchronous I/O 라이브러리가 존재하고 Node.js가 이를 내
부적으로 이용합니다.
Node.js는 I/O 작업을 자신의 메인 스레드가 아닌 다른 스레드에 위임함으로
써 Single Thread로 Asynchronous I/O를 지원 합니다.
=> 즉, Node.js는 Asynchronous I/O를 지원하고 그 기반에는 libuv 가 있습
니다.
5
Event loop #1
타이머(Timers): setTimeout(),setInterval()에 의해 예약된 콜백 함수 실행
보류 중인 콜백(Pending callbacks): Blocking 작업을 완료한 I/O 콜백 실행
유휴 및 준비 (Idle, prepare): 이벤트 루프에서 사용하는 내부 단계
이벤트 루프는 Node.js가 여러 비동기 작업을 관리하기 위한 구현체입니다.
“
“
6
Event loop #2
폴링 (Poll): 새로운 I/O 이벤트를 검색하고 콜백을 실행
처리할 I/O 이벤트가 없는 경우 이벤트 루프는 이 단계에서 Blocking되고
새 이벤트가 도착할 때까지 기다림
확인 (Check): setImmediate()에 의해 예약된 콜백을 실행
콜백 닫기 (Close callbacks): socket.on('close', ...)에 의해 예약된 것과 같
은 콜백 닫기를 실행
7
Process #1
Timer Phase -> Pending Callbacks Phase -> Idle, Prepare Phase ->
Poll Phase -> Check Phase -> Close Callbacks Phase -> Timer Phase
한 페이즈(Phase)에서 다음 페이즈로 넘어가는 것을 틱(Tick)이라고 부릅니
다.
“
“
이때 이벤트 루프가 Node.js의 비동기 실행을 도와주는 것과 별개로 싱글 스
레드이므로 한번에 하나의 페이즈에만 진입해 한번에 하나의 작업만 수행할
수 있습니다. Poll Phase 작업을 처리하면서 Check Phase의 작업을 동시
에 처리하거나 Poll Phase의 작업을 한번에 여러 개씩 처리하는 것은 불가능
합니다.
“
“
8
Process #2
각 페이즈는 자신만의 큐를 하나씩 가지고 있는데, 이 큐에는 이벤트 루프가
실행해야 하는 작업들이 순서대로 담겨있습니다. Node.js가 페이즈에 진입
을 하면 이 큐에서 자바스크립트 코드(예를 들면 콜백)를 꺼내서 하나씩 실행
한다. 만약 큐에 있는 작업들을 다 실행하거나, 시스템의 실행 한도에 다다르
면 Node.js는 다음 페이즈로 넘어갑니다.
“
“
9
Summary
이벤트 루프는 Node.js가 비동기 작업을 관리하기 위한 구현체
이벤트 루프는 총 6개의 페이즈로 구성되어 있으며 한 페이즈에서 다음 페이즈
로 넘어가는 것을 틱이라고 함
각 페이즈는 자신만의 큐를 관리
Node.js는 순서대로 페이즈를 방문하면서 큐에 쌓인 작업을 하나씩 실행
페이즈의 큐에 담긴 작업을 모두 실행하거나 시스템의 실행 한도에 다다르면
Node.js는 다음 페이즈로 전환
이벤트 루프가 살아있는 한 Node.js는 이벤트 루프를 반복
10
Work process display
Loupe
JSV9000
11
참고자료
Morning Keynote- Everything You Need to Know About Node.js
Event Loop - Bert Belder, IBM
Node's Event Loop From the Inside Out by Sam Roberts, IBM
Node.js 이벤트 루프(Event Loop) 샅샅이 분석하기
이벤트 루프 (Event Loop)
12

More Related Content

Similar to nodejs_101.pdf

제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
NAVER D2
 
서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드
KwangSeob Jeong
 
Github 사용법
Github 사용법Github 사용법
Github 사용법
jong seok Kim
 
Asynchronous 101 - (1)
Asynchronous 101 - (1)Asynchronous 101 - (1)
Asynchronous 101 - (1)
MinChul Lee
 
Concurrent programming
Concurrent programmingConcurrent programming
Concurrent programming
Byeongsu Kang
 
Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012Daum DNA
 
Virtualization technology for security
Virtualization technology for securityVirtualization technology for security
Virtualization technology for security
hanbeom Park
 
Vingle tech talk #1
Vingle tech talk #1Vingle tech talk #1
Vingle tech talk #1
Tylor Shin
 
Play node conference
Play node conferencePlay node conference
Play node conference
John Kim
 
Overlapped IO와 IOCP 조사 발표
Overlapped IO와 IOCP 조사 발표Overlapped IO와 IOCP 조사 발표
Overlapped IO와 IOCP 조사 발표
Kwen Won Lee
 
Apache ZooKeeper 소개
Apache ZooKeeper 소개Apache ZooKeeper 소개
Apache ZooKeeper 소개
중선 곽
 
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것
흥배 최
 
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
Chanwoong Kim
 
이것이 리눅스다 - 김종욱
이것이 리눅스다 - 김종욱이것이 리눅스다 - 김종욱
이것이 리눅스다 - 김종욱
Jong Wook Kim
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
SeungYong Oh
 

Similar to nodejs_101.pdf (15)

제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
 
서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드
 
Github 사용법
Github 사용법Github 사용법
Github 사용법
 
Asynchronous 101 - (1)
Asynchronous 101 - (1)Asynchronous 101 - (1)
Asynchronous 101 - (1)
 
Concurrent programming
Concurrent programmingConcurrent programming
Concurrent programming
 
Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012
 
Virtualization technology for security
Virtualization technology for securityVirtualization technology for security
Virtualization technology for security
 
Vingle tech talk #1
Vingle tech talk #1Vingle tech talk #1
Vingle tech talk #1
 
Play node conference
Play node conferencePlay node conference
Play node conference
 
Overlapped IO와 IOCP 조사 발표
Overlapped IO와 IOCP 조사 발표Overlapped IO와 IOCP 조사 발표
Overlapped IO와 IOCP 조사 발표
 
Apache ZooKeeper 소개
Apache ZooKeeper 소개Apache ZooKeeper 소개
Apache ZooKeeper 소개
 
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것
 
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
 
이것이 리눅스다 - 김종욱
이것이 리눅스다 - 김종욱이것이 리눅스다 - 김종욱
이것이 리눅스다 - 김종욱
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
 

More from Daniel Lim

내가 생각하는 개발자란?
내가 생각하는 개발자란?내가 생각하는 개발자란?
내가 생각하는 개발자란?
Daniel Lim
 
개발자를 넘어 기술 리더로 가는 길을 읽고
개발자를 넘어 기술 리더로 가는 길을 읽고개발자를 넘어 기술 리더로 가는 길을 읽고
개발자를 넘어 기술 리더로 가는 길을 읽고
Daniel Lim
 
스크럼 101
스크럼 101스크럼 101
스크럼 101
Daniel Lim
 
For You
For YouFor You
For You
Daniel Lim
 
Nest js 101
Nest js 101Nest js 101
Nest js 101
Daniel Lim
 
피드백 시스템
피드백 시스템피드백 시스템
피드백 시스템
Daniel Lim
 
13.code split
13.code split13.code split
13.code split
Daniel Lim
 
12.context api
12.context api12.context api
12.context api
Daniel Lim
 
11.react router dom
11.react router dom11.react router dom
11.react router dom
Daniel Lim
 
9.component style
9.component style9.component style
9.component style
Daniel Lim
 
7.component life cycle
7.component life cycle7.component life cycle
7.component life cycle
Daniel Lim
 
8.hooks
8.hooks8.hooks
8.hooks
Daniel Lim
 
6.component repeat
6.component repeat6.component repeat
6.component repeat
Daniel Lim
 
4.event handling
4.event handling4.event handling
4.event handling
Daniel Lim
 
5.ref 101
5.ref 1015.ref 101
5.ref 101
Daniel Lim
 
3.component 101
3.component 1013.component 101
3.component 101
Daniel Lim
 
2.jsx 101
2.jsx 1012.jsx 101
2.jsx 101
Daniel Lim
 
1.react 101
1.react 1011.react 101
1.react 101
Daniel Lim
 
Swagger? OAS? with NodeJS
Swagger? OAS? with NodeJSSwagger? OAS? with NodeJS
Swagger? OAS? with NodeJS
Daniel Lim
 
CuKu V1.3
CuKu V1.3CuKu V1.3
CuKu V1.3
Daniel Lim
 

More from Daniel Lim (20)

내가 생각하는 개발자란?
내가 생각하는 개발자란?내가 생각하는 개발자란?
내가 생각하는 개발자란?
 
개발자를 넘어 기술 리더로 가는 길을 읽고
개발자를 넘어 기술 리더로 가는 길을 읽고개발자를 넘어 기술 리더로 가는 길을 읽고
개발자를 넘어 기술 리더로 가는 길을 읽고
 
스크럼 101
스크럼 101스크럼 101
스크럼 101
 
For You
For YouFor You
For You
 
Nest js 101
Nest js 101Nest js 101
Nest js 101
 
피드백 시스템
피드백 시스템피드백 시스템
피드백 시스템
 
13.code split
13.code split13.code split
13.code split
 
12.context api
12.context api12.context api
12.context api
 
11.react router dom
11.react router dom11.react router dom
11.react router dom
 
9.component style
9.component style9.component style
9.component style
 
7.component life cycle
7.component life cycle7.component life cycle
7.component life cycle
 
8.hooks
8.hooks8.hooks
8.hooks
 
6.component repeat
6.component repeat6.component repeat
6.component repeat
 
4.event handling
4.event handling4.event handling
4.event handling
 
5.ref 101
5.ref 1015.ref 101
5.ref 101
 
3.component 101
3.component 1013.component 101
3.component 101
 
2.jsx 101
2.jsx 1012.jsx 101
2.jsx 101
 
1.react 101
1.react 1011.react 101
1.react 101
 
Swagger? OAS? with NodeJS
Swagger? OAS? with NodeJSSwagger? OAS? with NodeJS
Swagger? OAS? with NodeJS
 
CuKu V1.3
CuKu V1.3CuKu V1.3
CuKu V1.3
 

nodejs_101.pdf

  • 1. NODE.JS aysnc & Single thread lahuman 1
  • 2. Single Thread??! nodejs는 Single Thread로 동작하지만, Asynchronous I/O(libuv) 를지원합니 다. 2
  • 3. What APIs use which async mechanism? Kernel Async TCP/UDP server and clients, pipes, dns.sresolveXXX Thread Pool fs.*, dns.lookup, pipes NIX Only UNIX domain sockets, TTY input, NIX signals Windows Only Child Process, TTY input, TCP servers 3
  • 4. How to work on libuv ? libuv 는 운영체제의 커널을 추상화해서 비동기 API를 지원 libuv 의 비동기 API를 처리 방식 커널이 지원하는 비동기 작업을 libuv 에게 요청하면 libuv 는 대신 커널에 게 이 작업을 비동기적으로 요청 커널이 지원하지 않는 비동기 작업을 libuv 에게 요청하면 livuv 는 내부에 가지고있는 스레드 풀에게 이 작업을 요청 4
  • 5. What is libuv ? libuv 라는 Asynchronous I/O 라이브러리가 존재하고 Node.js가 이를 내 부적으로 이용합니다. Node.js는 I/O 작업을 자신의 메인 스레드가 아닌 다른 스레드에 위임함으로 써 Single Thread로 Asynchronous I/O를 지원 합니다. => 즉, Node.js는 Asynchronous I/O를 지원하고 그 기반에는 libuv 가 있습 니다. 5
  • 6. Event loop #1 타이머(Timers): setTimeout(),setInterval()에 의해 예약된 콜백 함수 실행 보류 중인 콜백(Pending callbacks): Blocking 작업을 완료한 I/O 콜백 실행 유휴 및 준비 (Idle, prepare): 이벤트 루프에서 사용하는 내부 단계 이벤트 루프는 Node.js가 여러 비동기 작업을 관리하기 위한 구현체입니다. “ “ 6
  • 7. Event loop #2 폴링 (Poll): 새로운 I/O 이벤트를 검색하고 콜백을 실행 처리할 I/O 이벤트가 없는 경우 이벤트 루프는 이 단계에서 Blocking되고 새 이벤트가 도착할 때까지 기다림 확인 (Check): setImmediate()에 의해 예약된 콜백을 실행 콜백 닫기 (Close callbacks): socket.on('close', ...)에 의해 예약된 것과 같 은 콜백 닫기를 실행 7
  • 8. Process #1 Timer Phase -> Pending Callbacks Phase -> Idle, Prepare Phase -> Poll Phase -> Check Phase -> Close Callbacks Phase -> Timer Phase 한 페이즈(Phase)에서 다음 페이즈로 넘어가는 것을 틱(Tick)이라고 부릅니 다. “ “ 이때 이벤트 루프가 Node.js의 비동기 실행을 도와주는 것과 별개로 싱글 스 레드이므로 한번에 하나의 페이즈에만 진입해 한번에 하나의 작업만 수행할 수 있습니다. Poll Phase 작업을 처리하면서 Check Phase의 작업을 동시 에 처리하거나 Poll Phase의 작업을 한번에 여러 개씩 처리하는 것은 불가능 합니다. “ “ 8
  • 9. Process #2 각 페이즈는 자신만의 큐를 하나씩 가지고 있는데, 이 큐에는 이벤트 루프가 실행해야 하는 작업들이 순서대로 담겨있습니다. Node.js가 페이즈에 진입 을 하면 이 큐에서 자바스크립트 코드(예를 들면 콜백)를 꺼내서 하나씩 실행 한다. 만약 큐에 있는 작업들을 다 실행하거나, 시스템의 실행 한도에 다다르 면 Node.js는 다음 페이즈로 넘어갑니다. “ “ 9
  • 10. Summary 이벤트 루프는 Node.js가 비동기 작업을 관리하기 위한 구현체 이벤트 루프는 총 6개의 페이즈로 구성되어 있으며 한 페이즈에서 다음 페이즈 로 넘어가는 것을 틱이라고 함 각 페이즈는 자신만의 큐를 관리 Node.js는 순서대로 페이즈를 방문하면서 큐에 쌓인 작업을 하나씩 실행 페이즈의 큐에 담긴 작업을 모두 실행하거나 시스템의 실행 한도에 다다르면 Node.js는 다음 페이즈로 전환 이벤트 루프가 살아있는 한 Node.js는 이벤트 루프를 반복 10
  • 12. 참고자료 Morning Keynote- Everything You Need to Know About Node.js Event Loop - Bert Belder, IBM Node's Event Loop From the Inside Out by Sam Roberts, IBM Node.js 이벤트 루프(Event Loop) 샅샅이 분석하기 이벤트 루프 (Event Loop) 12