본문 바로가기

분류 전체보기253

[Android] 코루틴(Coroutine)의 Channel Channel 이란Channel은 코루틴 간의 데이터를 전송하기 위한 통신 수단으로, stream처럼 데이터를 주고받을 수 있는 인터페이스입니다.Channel의 구조는 BlockingQueue와 비슷하며, 동일하게 Thread-Safe 한 구조를 가지고 있습니다.차이점이 있다면 BlockingQueue는 값을 전달하는 과정에서 스레드를 block하지만, Channel은 스레드를 block하지 않고 suspending 하는 특징이 있습니다. Channel은 데이터를 제공하는 채널인 SendChannel 과 데이터를 소비하는 채널인 ReceiveChannel 로 이루어져 있습니다.  Channel은 송신자인 prooducer와 수신자인 consumer 사이에서 데이터를 주고 받는 중간 다리 역할을 하며,큐(.. 2025. 2. 12.
[Java] 동시성 문제 해결을 위한 atomic과 CAS 알고리즘 synchronized의 문제점synchronized는 blocking을사용하여 멀티 스레드 환경에서 공유 객체를 동기화하는 키워드입니다.그러나 blocking에는 여러 가지 단점이 존재하는데, 그 중에서 손 꼽는 문제는 성능 이슈입니다.특정 스레드가 해당 블럭 전체에 lock을 걸면, 해당 lock에 접근하는 스레드들은 블로킹 상태에 들어가기 때문에 아무 작업도 하지 못한 채 자원을 낭비합니다.또한 blocking 상태의 스레드를 준비 혹은 실행 상태로 변경하기 위해 시스템의 자원을 사용해야 합니다.결국 이 문제는 성능 저하로 이어집니다. 예를 들어 자동차 운전을 한다고 가정해보겠습니다.운전자가 방향 전환을 하려고 하는데, 마침 앞에 다른 자동차가 대기하고 있습니다.운전자는 앞의 차가 먼저 지나가기를 .. 2025. 2. 11.
[Java] 동시성 문제 해결을 위한 synchronized 키워드 SynchronizedJava는 크게 3가지 메모리 영역을 가지고 있습니다.static 영역heap 영역stack 영역 자바 멀티 스레드 환경에서는 스레드끼리 static 영역과 heap 영역을 공유하므로 공유 자원에 대한 동기화 문제를 신경 써야 합니다  이전 글에서 소개했듯이, 원자성 문제를 해결하기 위한 방법 중 하나인 synchronized 키워드에 대해 설명하려고 합니다.synchronized는 lock을 이용해 동기화를 수행하며 4가지의 사용 방법이 존재합니다.synchronized methodstatic synchronized methodsynchronized blockstatic synchronized blocksynchronized methodpublic class Method { .. 2025. 2. 11.
[Java] 가시성 문제 해결을 위한 volatile 키워드 이전 글에서는 동시성 프로그래밍에서 발생할 수 있는 문제 중 하나인 가시성 문제를 해결하기 위해 volatile 키워드를 사용한다고 하였습니다. 가시성 문제는 여러 개의 스레드가 사용됨에 따라, CPU Cache Memory와 RAM의 데이터가 서로 일치하지 않아 생기는 문제를 의미합니다. volatile 키워드를 붙인 공유 자원은 RAM에 직접 읽고 쓰는 작업을 수행할 수 있도록 해줍니다. 이번 글에서는 volatile 키워드를 통해 가시성을 보장하는 방법을 간단한 예시와 함께 설명하려고 합니다. 가시성을 보장하지 못한 예제public class Volatile { private static volatile boolean stopRequested; public static void main(.. 2025. 2. 11.
[Java] 멀티스레드 환경에서의 동시성 이슈 개요 멀티 스레드를 사용하는 환경에서 각 스레드가 공유 자원에 동시에 접근하는 상황이라면 경쟁상태(Race condition)가 발생할 수 있습니다. 경쟁상태가 발생하게 되는 원인은 가시성(Visibility)과 원자성(Mutual Exclusion)을 보장하지 못했기 때문인데요, Java에서는 synchronized 키워드와 Atomic Type, Concurrent Collection 등을 통해 이와 같은 동시성 문제를 해결할 수 있습니다.본 포스팅에서는 멀티 스레드 환경에서 발생할 수 있는 문제에 대해 설명하고 이를 해결할 수 있는 sychronized, volatile 키워드와 Atomic Type에 대한 내용을 다루겠습니다.  가시성 문제가시성 문제란, 여러 개의 스레드가 사용됨에 따라, CPU.. 2025. 2. 11.
[Android] 예외로인한 코루틴 종료 과정 살펴보기 코루틴에 대한 포스팅을 통해, 코루틴의 예외 전파 방식과 이를 방지하는 다양한 방법을 살펴보았습니다.이번 포스팅에서는 코루틴이 취소, 종료 메커니즘을 내부코드를 기반으로 분석하며, 전파 방식에 따른 예외 처리 방법을 구체적으로 다뤄보겠습니다.예외로인한 코루틴 종료 과정 살펴보기코루틴은 다음과 같은 스테이트 머신을 가지고 있습니다. 코루틴의 예외 처리 과정에 대해서 좀 더 자세히 알아보기 위해서 살펴보아야 할 상태는 CANCELLING 상태이며, 이 상태는 코루틴이 예외에 의해 종료될 경우 마지막으로 거쳐가는 상태입니다.만약 부모 코루틴은 예외 발생 없이 정상적으로 실행을 마친 상태에서 자식 코루틴들의 종료를 기다리는 상태(COMPLETING)에 있다 하더라도 자식 코루틴 중에 일부가 부모로 예외 발생을 .. 2025. 2. 10.