Javascript NonBlocking I/O




Javascript Non-Blocking I/O




I/O란?


terms:

http://terms.co.kr/IO.htm


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 APINon-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