코루틴 3

[코틀린 코루틴] 구조적 동시성

코루틴 컨텍스트이전 글에서 Dispatcher를 설정할 때, 이부분에 대해 의구심이 생길 수 있다.우린 분명 launch 의 인자로 Dispatcher를 넘겼는데, launch의 파라미터는 context를 받고 있다.이 컨텍스트는 뭐고, 왜 Dispatcher를 넘겨도 동작할까? 사실 우리가 넘긴 디스패처는 기존 코루틴 컨텍스트에 덮어씌워지는 역할을 수행한다. 코루틴 컨텍스트에는 다양한 정보들이 들어있다.코루틴 디스패처코루틴 생명주기Job 객체코루틴 객체 이름코루틴 ExceptionHandler그리고, 다음과 같이 파라미터로 넘긴 Context로 덮어씌우는게 가능하다.실제로 다음과 같이 코루틴 컨텍스트가 바뀐 것을 확인할 수 있다.구조적 동시성지금까지 코루틴 컨텍스트를 왜 알아봤냐 하면, 구조적 동시성을..

[코틀린 코루틴] 코틀린의 동시성 모델 - 코루틴

코틀린은 동시성 모델로 쓰레드 활용이 아닌, 코루틴을 권장한다.코틀린 코루틴 vs 전통적 스레드코틀린에서는 concurrent.thread 함수를 이용하면, 새 스레드를 간편하게 시작할 수 있다.하지만 이는 커널 스레드를 직접 만드는 형태이기 때문에 비용이 많이 든다.스레드는 계층 개념이 없기 때문에, 계층적 관리를 하기 까다롭다.스레드는 어떤 작업이 완료되길 기다리는 동안에는 블록된다.최신 시스템이라도 한번에 몇 천개의 스레드만 효과적으로 관리할 수 있다.기본적으로 스레드는 굉장히 무거운 자원이다.요청 1개를 처리하는 동안 스레드 1개를 할당하는 구조에서,DB 호출/외부 HTTP/파일 I/O 등으로 스레드가 블로킹되면 그 스레드는 그 시간 동안 유용한 일을 못 하면서도 계속 점유된다.동시 요청이 늘면 ..

이벤트-루프 모델과 DB 트랜잭션 지원

비동기(Promise, Async, Coroutine, Reactor) 에 대한 깊은 이해를 수행하다보면, 필연적으로 마주치는 어려움이 있다.바로 이벤트 루프 모델은 어떻게 DB I/O 방식을 바꾸는가 이다. 상당히 이해하기 어려운 개념이기 때문에, 읽는 독자 여러분들도 직접 그림을 그려보며 이해하는 것을 권장한다. 자바+스프링의 예시를 바탕으로 이야기를 전개해 나가겠다.목차이벤트 루프(비동기) 모델의 목표DB 드라이버와 DB간의 통신 방식DB 드라이버와 애플리케이션 간에 발생하는 문제점결론1. 이벤트 루프(비동기) 모델의 목표일반적인 HTTP 요청의 처리 흐름을 그려보면 다음과 같다.속이 빈 형태 - 인터페이스속이 채워져있는 형태 - 구현체너무나 당연한 이야기지만, 애플리케이션 코드 플로우는 자체적인 ..