Thread Concurrency

Haiseong Jeong·2022년 10월 31일
1
post-thumbnail

Thread

쓰레드(Thread)란 프로그램(프로세스) 실행의 단위다. 하나의 프로세스는 여러개의 쓰레드로 구성이 가능하다. 하나의 프로세스를 구성하는 쓰레드들은 프로세스에 할당된 메모리, 자원 등을 공유한다.

Multi-Thread

하나의 프로세스 내에서 두 개 이상의 스레드가 동시에 작업을 수행하는 것을 멀티스레드(multi-thread)라고 한다.

vs Multi-Process

프로세스는 운영체제로부터 자원을 할당받는 작업의 단위이고 쓰레드는 프로세스가 할당받은 자원을 이용하는 실행의 단위이다. 프로세스 생성을 위해 메모리와 자원을 할당하는 것은 비용이 많이든다. 스레드는 자신이 속한 프로세스의 자원들을 공유하기 때문에, 스레드를 생성하고 문맥 교환하는 것이 더욱 경제적이다.

독립된 스택과 PC 레지스터 값

스레드가 모든 자원을 공유하는 것은 아니다. 각 스레드는 독립된 스택과 PC 레지스터 값을 가진다.

각각의 쓰레드는 독립적인 작업을 수행해야 하기 때문이다. 스택은 함수 호출 시 전달되는 인자, 되돌아갈 주소값 및 함수 내에서 선언하는 변수 등을 저장하기 위해 사용된다. 스택 메모리 공간이 독립적이라는 것은 독립적인 함수 호출이 가능하다는 것이다.

PC 값은 쓰레드가 명령어의 어디까지 수행하였는지를 나타나게 된다. 쓰레드는 CPU를 할당받았다가 스케줄러에 의해 다시 선점당한다. 그렇기 때문에 명령어가 연속적으로 수행되지 못하고 어느 부분까지 수행했는지 기억할 필요가 있다.

동시성과 별렬성

동시성(Concurrency)

여러 스레드가 번갈아가면서 실행된다. 따라서 동시에 실행되는 것처럼 보이게 되는데 이것을 동시성이라 한다. 싱글 코어에서 멀티 스레드를 동작시키는 방식이다.

병렬성(Parallelism)

멀티 코어에서 멀티 스레드를 동작시키는 방식이다. 논리적으로 여러일이 동시에 처리되는 동시성과 다르게 실제로 물리적으로 동시에 여러 작업이 처리된다. 따라서 한번에 많은 일을 처리한다.

profile
나는 개발자다. 5000만큼 코딩한다.

0개의 댓글