동시성 프로그래밍

📌 자바 제공하는 스레드 vs 운영체제 스레드 자바에서 스레드를 사용할 때에는 Thread객체를 생성하고, 작업할 내용을 프로그래밍 한다. start()메서드가 실행되면 쓰레드 객체는 새로운 운영체제 스레드를 만들어달라고 요청하고, JVM에 요청해 정해진 크기의 스택 공간을 할당받아 로컬변수를 저장한다. 즉, Thread 객체는 운영체제의 스레드 1개가 담당하여, CPU의 core에 의해 스케쥴링된다. 이렇게 운영체제 스레드와 1:1로 맵핑되는 스레드를 “Platform Thread”라고 부른다. 이러한 Platform Thread는 OS Thread와 1:1로 매칭되기 때문에 많은 비용이 든다. 요약 CPU 스레드 스케쥴링에 대한 모든 책임을 운영체제가 가지고 있다. Platform Thread는 운영..
도메인 주도 개발이라는 책을 읽으면서 이벤트라는 개념을 알게 되었고, 이벤트는 비동기적인 방식으로 동작한다라는 것을 알게되었다. 동기와 비동기의 차이에 대해서 이해 해보고, 동기 비동기를 언급하면서 Blocking, Non-blocking 이라는 용어도 등장하는데 이러한 용어들의 개념과 차이를 알아보자. 📌 Sync(동기) vs Async(비동기) 단순히 생각하면 동기는 특정 작업이 끝날 때 까지 기다리고, 순차적으로 실행되는 방식이다. 반면에 비동기는 다른 작업이 끝나지 않아도 기다리지 않고 자신의 동작을 수행하는 방식입니다. 하지만, 이렇게 단순히 생각하면 Blocking, Non-blocking 관점을 생각했을 때 해석이 먼가 어렵게 되는 것 같다. 그래서 나는 다음과 같이 이해하려고 한다. 동기방..
현대 컴퓨터에서는 CPU가 메모리의 데이터를 사용할 때, 메모리에 곧바로 접근하지 않고 캐시메모리를 활용한다. 또한 운영체제 자체에서 코드를 재정렬해서 효율적으로 구동하려고 하는 경우가 있는데, 이러한 상황들과 멀티쓰레딩 환경이 만나서 발생할 수 있는 여러 문제들이 있다. 어떤 문제가 있고, 어떻게 방지할 수 있는지 알아보자. 코드 재정렬(Reordering) 아래의 공유 클래스를 통하여 thread1 은 increment()를 무한반복하고, thread2는 checkForDataRace()를 무한반복하는 경우에 생긴다. public static class SharedClass { private int x = 0; private int y = 0; public void increment() { x++; ..
앞에서 멀티쓰레드 환경에서 발생할 수 있는 문제상황들을 알아보았는데, 그렇다면 어떻게 해야 이런 문제상활들을 발생하지 않고 스레드 안전하게 할 수 있을까? 자바에서 활용할 수 있는 동기화 기법을 알아보자. Synchroniztion 키워드 활용 synchroniztion 키워드를 활용하면, 여러 스레드에서 동시에 접근할 수 있는 객체에 Lock방식을 적용해서 하나의 스레드만 접근할 수 있도록 하는 것이다. 즉, 하나의 스레드가 Lock이 걸린 객체를 사용중이라면 다른 객체는 사용할 수 없게 막는 기법이다. 아래와 같이 메서드에 하나의 스레드만 접근하도록 막거나, 혹은 임계영역에만 적용시킬 수 도 있다. // 하나의 스레드만 해당 메서드를 사용할 수 있다. public synchronized void in..
멀티 스레드 프로그래밍을 공부하기전에 멀티 쓰레드를 사용하는 이유는 무엇일까? 바로 여러개의 쓰레드를 사용하면 동시에 여러 가지 작업을 수행할 수 있어서, 애플리케이션의 반응성을 향상시킬 수 있기 때문이다. 또한 여러 작업을 동시에 실행하여 더 뛰어난 성능을 달성할 수 도 있다. 그러므로 멀티쓰레드 환경에서 프로그래밍을 할 때 중요한 부분들을 잘 알아둬야 한다. 스레드 안전성 스레드의 안전성을 알아보기전에 스레드의 가장 큰 특징을 알고가야한다. 바로 모든 스레드가 공유하는 메모리 공간을 가지고 있다는 것이다. 모든 스레드가 하나의 메모리 공간을 공유한다는 말은, 여러개의 스레드가 메모리에 동시에 접근하여 데이터를 조작할 수 있고, 데이터 경쟁상태와 같은 여러 문제들을 일으킬 수 있기 때문에 멀티쓰레드 환..
Don't stop 훈
'동시성 프로그래밍' 카테고리의 글 목록