SERIES

멀티스레드와 동시성

7 Posts·Last updated on August 17, 2024

(1) Process & Thread

August 07, 2024

멀티태스킹 vs 멀티프로세싱 멀티 태스킹은 하나의 CPU 코어가 여러 프로그램의 실행 시간을 분할해서 (시분할, Time Sharing) 번갈아 실행함으로써, 마치 동시에 실행되는 것 처럼 하는 기법입니다. 멀티 프로세싱은 여러 CPU 코어를 사용하여 물리적으로 동시에 여러 작업을 수행하는 것을 의미합니다. 프로세스 vs 스레드 프로그램은 실제 실행되기…


(2) Thread 기본구현과 상태

August 09, 2024

스레드를 생성하는 방법 2가지 Thread 상속 Thread 클래스를 상속하고, 스레드가 실행할 코드를 run 메소드에 재정의합니다. 그리고나서 Thread를 상속한 클래스의 객체를 생성하고 start() 메소드를 호출합니다. start()를 호출하면 스레드가 만들어지고 해당 스레드에서 run 메소드를 실행합니다. Runnable 구현 Runnable …


(3) 메모리 가시성과 동시성

August 11, 2024

메모리 가시성이란 멀티스레드 환경에서 한 스레드가 변경한 값이 다른 스레드에서 언제 보이는지 알 수 없는 문제를 메모리 가시성(memory visibility)이라 합니다. 문제점 예시 예를들어, 아래 코드는 메모리 가시성 문제 때문에 work 스레드는 여전히 동작합니다. 그림으로 나타내면 다음과 같습니다. 스레드와 스레드는 각자 CPU에 할당받아…


(4) 생산자 소비자 문제

August 12, 2024

생산자 소비자 문제란 생산자 소비자 문제는 멀티스레드 프로그래밍에서 자주 등장하는 동시성 문제 중 하나로, 여러 스레드가 동시에 데이터를 생산하고 소비하는 과정에서 발생합니다. 생산자란, 데이터를 생성하는 역할을 하며, 파일에서 데이터를 읽어오거나 네트워크에서 데이터를 받아와 버퍼에 저장하는 역할을 하는 스레드입니다. 소비자란, 생성된 데이터를 사용하는 …


(5) 동시성 컬렉션

August 13, 2024

컬렉션 프레임워크는 원자적인 연산이 아니고 여러 연산이 들어가 있기 때문에 멀티 스레드 상황에서 문제가 생깁니다. 따라서 동시성 컬렉션을 만들기 위해 여러가지 도입을 했습니다. 프록시 도입 , , , 등의 코드도 모두 복사해서 기능을 추가한다는 것은 매우 비효율적입니다. 기능만 살짝 추가하면 되는 상황에 프록시 도입은 매우 효율적입니다. 프록시란, …


(6) 스레드 풀과 Executor 프레임워크

August 14, 2024

스레드를 직접 구현해서 사용할 때 문제점 스레드 생성 비용으로 인한 성능 문제 : 스레드 생성하는 작업은 시스템 콜을 통해 처리되며, 이는 OS 커널 레벨에서 메모리 할당등이 일어나기 때문에 성능이 느립니다. 또한, 새로운 스레드가 생성되면 운영체제의 스케줄러는 이 스레드를 관리하고 실행 순서를 …


(7) ThreadLocal

August 17, 2024

스레드로컬이 뭔가요? 은 멀티 스레드 환경에서 각각의 스레드가 별도의 변수를 저장하고 사용할 수 있습니다. 스레드 로컬은 어떻게 구현되어 있나요? 단계별로 설명해보세요 1단계 구현 를 구현하려고 할 때 를 키로 사용하는 으로 구현할 것 같습니다. 이는 뭔가 잘 작동될 것 같지만 문제가 있습니다. 은 동시성 문제를 해결하지만 그만큼 성능저하가 발생합니다. …