반응형

동시성 코드와 블로킹(blocking)콜 그리고 아카(akka)

여러 개의 스레드가 동시에 작업을 수행하더라도 synchronized 블록이나 데이터베이스, 네트워크 API 호출 등을 만날 다른 스레드와 나란히 줄을 서서 순차적으로 작업을 수행해야 하는 경우도 있다. 암달의 법칙은 프로그램이 있는 속도의 상한이 이런 순차적 코드가 사용하는 시간에 의해서 제한된다고 말한다. 이러한 순차적 코드의 다른 이름은 블로킹(blocking)콜이다. 조금 과장해서 말하자면 자바 개발자가 스레드를 이용해서 만들어내는 '동시성' 코드는 일종의 신기루다. 사실은 코드 곳곳에 존재하는 블로킹 , 순차적 코드 때문에 전체적인 프로그램의 처리율은 이미 상한이 정해져 있지만 여러개의 스레드가 '동시에' 동작한다는 사실로부터 위안을 받을 뿐이다.


아카(akka) 스칼라(scala)언어로 작성되었지만 아래로 내려가면 자바의 동시성 패키지를 사용하기 때문에 아카를 사용하는 것은 궁극적으로 자바의 Thread Task 사용하는 것과 마찬가지다. 하지만 아카를 사용하면 프로그램 곳곳에 존재하는 순차적 부분, 블로킹 콜을 전부 없애거나 최소한으로 만드는 것이 가능해진다. 아카(akka) 이용해서 프로그램을 설계하는 것은 블로킹 호출이 일어나는 지점을 논블로킹 호출로 전환하는 작업을 수행하는 것을 의미한다.



반응형

+ Recent posts