스레드의 동시 상태변경 문제는 코루틴에서도 동일하게 접할 수 있다.
상태공유를 코루틴 간에 무분별하게 하면, thread-safe 하지 못한 코드가 작성될 수 있다.
따라서 아래처럼 임계영역은 하나의 스레드 컨텍스트로 제한할 수 있다. 이를 Thread confinement이라 한다.
Completed 100000 actions in 474 ms
임계영역에 진입할 때마다 싱글 스레드 컨텍스트로 전환시키는 위와 같은 방법을 fine-grained 방식이라 한다. 다음에 소개할 coarse-grained 방식보다 상대적으로 느리다.
Completed 100000 actions in 9 ms
위 방식은 coarse-grained 방식이라 한다. 애초에 임계영역에 진입하기 전에 임계영역을 호출하는 함수 자체를 싱글 스레드 컨텍스트로 래핑 했다.
사실 두 방식의 차이보다는, 스레드 컨텍스트의 문맥교환의 비용을 더 체감할 수 있는 예제였다고 생각한다.
참고
https://kotlinlang.org/docs/shared-mutable-state-and-concurrency.html
'Programming > Languages (Java, etc)' 카테고리의 다른 글
코루틴 스코프에서 스레드 블로킹 해보기 (0) | 2024.12.26 |
---|---|
[Kotlin, Jackson] @JsonCreator 로 enum 값 유연하게 역직렬화 (0) | 2024.08.09 |
[Kotlin] runBlocking vs coroutineScope (0) | 2024.08.02 |
[Java] JDK 21 Virtual Threads 톺아보기 (1) | 2024.01.04 |
[JPA] JPA와 @Transactional (2) | 2023.12.03 |
댓글