멀티스레드에서의 동시성과 병렬성

최정은·2022년 10월 31일
0

Backend Roadmap

목록 보기
18/23
post-thumbnail

스레드와 멀티스레드

스레드(thread)는 프로세스 내에서 실제로 작업을 수행하는 주체를 의미한다. 모든 프로세스에는 한 개 이상의 스레드가 존재하여 작업을 수행한다. 하나의 프로세스 내에서 두 개 이상의 스레드가 동시에 작업을 수행하는 것을 멀티스레드(multi-thread)라고 한다. 멀티스레드는 각 스레드가 자신이 속한 프로세스의 메모리를 공유한다.

멀티스레드의 동작 방식

동시성과 병렬성은 멀티스레드의 동작 방식이다.

동시성 (Concurrency)

동시성은 싱글 코어에서 멀티스레드를 동작시키기 위한 방식으로 멀티태스킹을 위해 여러 개의 스레드가 번갈아가면서 실행되는 성질을 말한다. 동시성을 이용한 싱글 코어의 멀티 태스킹은 각 스레드들이 병렬적으로 실행되는 것처럼 보이지만 사실은 조금씩 번갈아가며 실행되는 것이다.

멀티태스킹은 한 번에 두가지 이상의 작업을 CPU와 같은 공유자원을 나누어 사용해서 동시에 처리하는 것으로, 다중 작업이라고도 한다.

싱글 코어에서 여러 작업을 동시에 실행되는 것처럼 보이기 위해 번갈아가며 작업을 수행하는데, 이때 컨텍스트 스위칭(context switching)이 일어난다. 컨텍스트 스위칭이란 실행중인 프로세스(작업)을 교체해야 할 때, 다음 프로세스의 정보를 PCB에서 가져와 교체하는 작업을 말한다.

컨텍스트 스위칭이 잦게 발생하면 오버헤드 비용이 발생하여 성능이 떨어진다. 오버헤드란 사용된 시간과 메모리의 양을 말한다.

병렬성 (Parallelism)

병렬성은 멀티 코어에서 멀티스레드를 동작시키는 방식으로, 한 개 이상의 스레드를 포함하는 각 코어들이 동시에 실행되는 성질을 말한다. 병렬성은 데이터 병렬성과 작업 병렬성으로 구분된다.

  • 데이터 병렬성은 전체 데이터를 쪼개 서브 데이터들로 만든 뒤, 서브 데이터들을 병렬 처리하여 작업을 빠르게 수행하는 것을 말한다. Java 8에서 지원하는 병렬 스트림이 데이터 병렬성을 구현한 것이다. 서브 데이터는 멀티 코어의 수만큼 쪼개어 각 데이터들을 분리된 스레드에서 병렬 처리한다.

  • 작업 병렬성은 서로 다른 작업을 병렬 처리하는 것을 말한다. 대표적인 예는 웹 서버로, 각각의 브라우저에서 요청한 내용을 개별 스레드에서 병렬로 처리한다. 네트워크 상의 여러 컴퓨터에세 분산 작업을 요청하는 분산 컴퓨팅도 이에 해당한다.

Reference

스레드 개념
동시성과 병렬성
동시성과 병렬성2

profile
https://dolmeng22.tistory.com 로 이전했습니다~

0개의 댓글