Javascript NonBlocking I/O
Javascript Non-Blocking I/O
I/O란?
terms:
wiki:
http://ko.wikipedia.org/wiki/%EC%9E%85%EC%B6%9C%EB%A0%A5
Blocking I/O(동기 I/O): 요청한 I/O(DB, 파일, 네트웍 등..)가 완료될때까지 해당 Thread(Single, Multi)를 "대기 모드"로 돌렸다가 I/O 완료 후 유저 코드를 실행시킨다.
var ret1 = $.post('http://mohwa.org/html/defaultTest.html?type=DB');
// I/O가 완료된 후 대기중이었던 유저 코드(새로운 요청)가 실행된다.
var ret2 = $.post('http://mohwa.org/html/defaultTest.html?type=File');
NonBlocking I/O(비동기 I/O): 요청한 I/O의 완료 여부와 관계없이 바로 리턴해서 유저 코드가 계속 실행되도록 한다. 이때 유저 코드는 요청한 I/O가 완료(HTTP 응답 등과 같은...)될때까지 다른 사용자의 요청을 처리할 수 있다.
var ret1 = $.post('http://mohwa.org/html/defaultTest.html?type=DB', function(ret){
// callback
console.log('NonBlocking I/O callback pattern' + new Date().getTime());
});
// I/O 완료와 관계없이 바로 리턴되며, 유저 코드(새로운 요청)가 계속해서 실핸된다.
var ret2 = $.post('http://mohwa.org/html/defaultTest.html?type=File', function(ret){
// callback
console.log('NonBlocking I/O callback pattern' + new Date().getTime());
});
보통 "Single Thread" 방식 언어의 비동기 구현을 위해 Non-Blocking I/O 방식이 사용된다.(Node.js API 또한 이 방식으로 구현 되었다.)
하지만 이 방식을 사용(채택, 구현)하기 위해서는 기존 OS단에서 자동으로 처리되던 Thread 스위칭 작업을 일정 부분 유저 코드로 구현(비동기 처리)해야 한다는 부담이 존재한다.
* AJAX(XmlHttpRequest) API 및 Node.js API는 Non-Blocking I/O 방식으로 구현되어 있다.
Non-Blocking I/O(비동기) 방식 도식화 이미지:
JQuery Ajax 관련 코드(Non-Blocking I/O 방식과 Callback Pattern 사용)
$.post('http://mohwa.org/html/defaultTest.html', function(ret){
console.log('NonBlocking I/O callback pattern' + new Date().getTime());
});
Non-Blocking I/O 방식이란?
http://drypot.tumblr.com/post/11175657085/node