Successfully reported this slideshow.
Your SlideShare is downloading. ×

nodejs_101.pdf

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Upcoming SlideShare
Node.js 기본
Node.js 기본
Loading in …3
×

Check these out next

1 of 12 Ad

More Related Content

Similar to nodejs_101.pdf (15)

Advertisement

Recently uploaded (20)

nodejs_101.pdf

  1. 1. NODE.JS aysnc & Single thread lahuman 1
  2. 2. Single Thread??! nodejs는 Single Thread로 동작하지만, Asynchronous I/O(libuv) 를지원합니 다. 2
  3. 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. 4. How to work on libuv ? libuv 는 운영체제의 커널을 추상화해서 비동기 API를 지원 libuv 의 비동기 API를 처리 방식 커널이 지원하는 비동기 작업을 libuv 에게 요청하면 libuv 는 대신 커널에 게 이 작업을 비동기적으로 요청 커널이 지원하지 않는 비동기 작업을 libuv 에게 요청하면 livuv 는 내부에 가지고있는 스레드 풀에게 이 작업을 요청 4
  5. 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. 6. Event loop #1 타이머(Timers): setTimeout(),setInterval()에 의해 예약된 콜백 함수 실행 보류 중인 콜백(Pending callbacks): Blocking 작업을 완료한 I/O 콜백 실행 유휴 및 준비 (Idle, prepare): 이벤트 루프에서 사용하는 내부 단계 이벤트 루프는 Node.js가 여러 비동기 작업을 관리하기 위한 구현체입니다. “ “ 6
  7. 7. Event loop #2 폴링 (Poll): 새로운 I/O 이벤트를 검색하고 콜백을 실행 처리할 I/O 이벤트가 없는 경우 이벤트 루프는 이 단계에서 Blocking되고 새 이벤트가 도착할 때까지 기다림 확인 (Check): setImmediate()에 의해 예약된 콜백을 실행 콜백 닫기 (Close callbacks): socket.on('close', ...)에 의해 예약된 것과 같 은 콜백 닫기를 실행 7
  8. 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. 9. Process #2 각 페이즈는 자신만의 큐를 하나씩 가지고 있는데, 이 큐에는 이벤트 루프가 실행해야 하는 작업들이 순서대로 담겨있습니다. Node.js가 페이즈에 진입 을 하면 이 큐에서 자바스크립트 코드(예를 들면 콜백)를 꺼내서 하나씩 실행 한다. 만약 큐에 있는 작업들을 다 실행하거나, 시스템의 실행 한도에 다다르 면 Node.js는 다음 페이즈로 넘어갑니다. “ “ 9
  10. 10. Summary 이벤트 루프는 Node.js가 비동기 작업을 관리하기 위한 구현체 이벤트 루프는 총 6개의 페이즈로 구성되어 있으며 한 페이즈에서 다음 페이즈 로 넘어가는 것을 틱이라고 함 각 페이즈는 자신만의 큐를 관리 Node.js는 순서대로 페이즈를 방문하면서 큐에 쌓인 작업을 하나씩 실행 페이즈의 큐에 담긴 작업을 모두 실행하거나 시스템의 실행 한도에 다다르면 Node.js는 다음 페이즈로 전환 이벤트 루프가 살아있는 한 Node.js는 이벤트 루프를 반복 10
  11. 11. Work process display Loupe JSV9000 11
  12. 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

×