코루틴이 대체 뭔데최근 컴퓨터 밑바닥의 비밀 에 대한 책을 읽으면서 고급 프로그래밍을 위한 공부를 하던 도중 동시성 프로그래밍에 대한 내용과 코루틴에 대한 부분이 등장했고 해당 챕터를 읽으면서 이해를 하는데 있어서 꽤나 애를 먹었다. 동시성 프로그래밍을 달성하기 위한 개념적인 것들과 코루틴에 대한 기본적인 이해는 어렵지 않다고 하지만 실질적인 동작 흐름을 시간단위로 쪼개서 생각을 했을 때 과연 어떠한 방식으로 동작하는 것인가 에 대한 부분을 정확하게 정의하고 넘어가야 겠다는 생각을 하게 되었고 시간 단위로 쪼개서 프로세스의 실행흐름을 살펴보는 과정을 가지기로 했다. 우선 코루틴을 이해하기 위해서 가장 중요한 부분은 동시성 프로그래밍과 병렬성 프로그래밍에 대한 이해에서 부터 시작된다고 생각한다. 동시성 프..
멀티코어 프로세서가 발전하면서 애플리케이션의 속도는 멀티 코어 프로세서를 얼마나 잘 활용할 수 있도록 소프트웨어를 개발하는가에 따라 달라질 수 있다. 여러가시 서비스를 동시에 제공하는 마이크로서비스 아키텍처의 선택이 지난 몇 년간 증가한것을 통해 이러한 추세를 확인할 수 있다. 위와 같은 서비스를 제공함에 있어서 동시간 여러 서비스의 응답을 기다리는 동안 연산이 블록되거나 귀중한 CPU 클록 사이클 자원을 낭비하고 싶지 않다면 동시성을 필요로 하는 상황 즉 조금씩 연관된 작업을 같은 CPU에서 동작하는 것 또는 애플리케이션의 생산성을 극대화 할 수 있도록 코어를 바쁘게 유지하는 것이 목표라면 원격 서비스나 데이터베이스 결과를 기다리는 스레드를 블록함으로 연산 자원을 낭비하는 일 등을 피해야만 한다. 위와..
수년 전까지 대규모 애플리케이션은 수십 대의 서버, 기가바이트의 데이터, 수초의 응답 시간, 당연히 여겨졌던 몇 시간의 유지보수 시간 등의 특징을 가졌지만 오늘날에는 다음과 같은 세 가지 이유로 상황이 변하고 있다. 빅데이터 : 엄청난 양의 빅 데이터를 처리할 일이 많아졌다. 다양한 환경 : 모바일 디바이스부터 수천 개의 멀티 코어 프로세서로 실행되는 클라우드 환경까지 다양하게 분포되어있다. 사용 패턴 : 언제 어디서나 접근 가능한 밀리초 단위의 응답 시간을 기대하는 서비스가 많아졌다. 위와 같은 이유로 패러다임에 맞게 설계된 애플리케이션은 발생한 데이터 항목을 바로 처리함으로 사용자에게 높은 응답성을 제공한다. 리액티브 애플리케이션과 시스템 개발의 핵심 원칙 반응성 (responsive) : 리액티브 ..
BlockingQueue가 사용된 코드를 보면서 가장먼저 확인해 봐야 했던 부분은 생산자 소비자 패턴이다. (모든 경우가 위와 같은 경우가 될 수는 없지만 일반적인 구조는 위와 같은 형태) 멀티 쓰레드 환경이나 혹은 다양한 부분에서 높은 비율의 공통 사용 로직이 있다고 가정할 때 과부하를 막기위해서 어떠한 조치를 해야한다. 이 문제해결을 위해서 나온 것이 바로 생산자 소비자 패턴인데 공통적으로 수행해야 할 Task를 중심으로 작업을 생산해 내는 생산자(Producer)와 작업을 처리하는 부분인 소비자(Consumer)의 형태로 나눠서 부하를 조절하겠다는것이고 생산된 작업 Task 는 Queue라는 공통 자원을 통해 관리, 생산자와 소비자의 역할을 분리시키자는 개념이다. 분리된 생성자와 소비자는 각각의 ..