스레드는 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위를 말한다. 일반적으로 한 프로그램은 하나의 스레드를 가지고 있지만, 프로그램 환경에 따라 둘 이상의 스레드를 동시에 실행할 수 있다. 이러한 실행 방식을 '멀티스레드'라고 한다.
멀티 스레딩
멀티 스레드(multi thread)란 하나의 프로세스 내에서 둘 이상의 스레드가 동시에 작업을 수행하는 것을 의미한다. 멀티 스레드는 각 스레드가 자신이 속한 프로세스의 메모리를 공유한다.
멀티 스레드에서 동시성과 병렬성
동시성은 싱글 코어에서 멀티 스레드를 동작시키기 위한 방식으로 멀티 태스킹을 위해 여러 개의 스레드가 번걸아가면서 실행되는 성질을 말한다. 동시성을 이용한 싱글 코어의 멀티 태스킹은 각 스레드들이 병렬적으로 실행되는 것처럼 보이지만 사실은 번갈아가면서 조금씩 실행되고 있는 것이다.
병렬성은 멀티 코어에서 멀티 스레드를 동작시키는 방식으로, 한 개 이상의 스레드를 포함하는 각 코어들이 동시에 실행되는 성질을 말한다. 병렬성은 데이터 병렬성(Data parallelism)과 작업 병렬성(Task parallelism)으로 구분된다.
데이터 병렬성은 전체 데이터를 쪼개 서브 데이터들로 만든 뒤, 서브 데이터들을 병렬 처리하여 작업을 빠르게 수행하는 것을 말한다. 자바 8에서 지원하는 병렬 스트림이 데이터 병렬성을 구현한 것이다. 서브 데이터는 멀티 코어의 수만큼 쪼개어 각각의 데이터들을 분리된 스레드에서 병렬 처리한다.
작업 병렬성은 서로 다른 작업을 병렬 처리하는 것을 말한다. 대표적인 예는 웹 서버로, 각각의 브라우저에서 요청한 내용을 개별 스레드에서 병렬로 처리한다.
멀티스레드의 동시성(Concurrency)과 병렬성(Parallelism)
멀티스레드는 동시성 방식이나 병렬성 방식으로 수행된다.
동시성(Concurrency)
싱글코어에서 멀티스레드를 동작시키기 위한 방식으로, 멀티 태스킹을 위해 여러개의 스레드가 '번갈아가면서' 실행되는 성질을 말한다. 그래서 이는 정말 물리적으로 동시에 동작하는 것은 아니다.
병렬성(Parallelism)
멀티 코어에서 멀티스레드를 동작시키는 방식으로, 한 개 이상의 스레드를 포함하는 각 코어들이 '동시에' 실행되는 성질을 말한다.
💡 동시성(Concurrency)의 '동시'와 병렬성의 설명에 있는 '동시' 때문에 헷갈릴 수 있으니 주의하기 바란다.
보통 동시성에 비해서 병렬성은 각 코어들이 동시에 실행되므로 CPU의 유휴 시간(idle time)이 줄어들어 성능이 좋다. 그러나 CPU 수보다 처리해야 할 프로세스나 스레드 수가 많다면 CPU를 사용하기 전까지 대기가 발생한다.
'백엔드' 카테고리의 다른 글
메모리 관리 (0) | 2022.10.13 |
---|---|
프로세스 관리 (0) | 2022.09.22 |
OS의 일반적인 작동방식 (0) | 2022.09.17 |
터미널 사용방법 (0) | 2022.09.09 |
호스팅은 무엇일까요? (0) | 2022.09.09 |