공부용 블로그

비동기처리, 콜백 함수 본문

설계/WebServer

비동기처리, 콜백 함수

tomato212 2018. 10. 19. 15:20



(참고) https://joshua1988.github.io/web-development/javascript/javascript-asynchronous-operation/



- 비동기 처리란?


특정 코드의 연산이 끝날때까지 코드의 실행을 멈추지 않고, 다음 코드를 먼저 실행하는 것



비동기 처리 문제 (1)


1) 특정 로직이 끝나고 그 결과를 변수 a에 담는다. 


2) return a를 수행한다. 



여기서 1)번을 수행 후 결과값을 기다리지 않고 바로 2)번을 실행하기 때문에 return a에 아직 아무값도 담기지 않은 초기값이 출력되게 된다. 



비동기 처리 문제 (2)


setTimeout() 문제


setTimeout()은 Web API의 한 종류이다. 코드를 바로 실행하지 않고 지정한 시간만큼 기다렸다가 실행한다.



1) console.log("hello")




2) setTimeout(function () {


    console.log('bye');


}, 3000);




3) console.log('hello again');



비동기 처리에 대한 이해가 없는 상태에서 위 코드를 보면 아마 다음과 같은 결과값이 나올 거라고 생각할 겁니다.

  • ‘Hello’ 출력
  • 3초 있다가 ‘Bye’ 출력
  • ‘Hello Again’ 출력

그런데 실제 결과 값은 아래와 같이 나오죠.

  • ‘Hello’ 출력
  • ‘Hello Again’ 출력
  • 3초 있다가 ‘Bye’ 출력

setTimeout() 역시 비동기 방식으로 실행되기 때문에 3초를 기다렸다가 다음 코드를 수행하는 것이 아니라 일단 setTimeout()을 실행하고 나서 바로 다음 코드인 console.log('Hello Again');으로 넘어갔습니다. 따라서, ‘Hello’, ‘Hello Again’를 먼저 출력하고 3초가 지나면 ‘Bye’가 출력됩니다.



=> 비동기 처리시 발생하는 문제를 해결하기 위한 함수가 콜백함수 


특정 로직이 끝났을 때 원하는 동작을 실행시킬 수 있다.



Q. vertx 구조에서 worker verticle은 Thread pool 안에서 동작하는데 blocking 방식으로 동작한다고 되어있다.


그럼 앞단인 표준 verticle이 ELP에서 비동기로 동작해도 뒷단인 Thread pool이 blocking되면 빠르게 처리할 수 없는거 아닌가??











'설계 > WebServer' 카테고리의 다른 글

Apache 마인드맵  (0) 2018.10.23
JAVA NIO 와 Selector  (0) 2018.10.19
vert.x 구조 이해하기  (0) 2018.10.18
JVM 이란  (0) 2018.10.13
Jmeter 테스트 오류  (0) 2018.10.11