스레드와 동시성

이명환·2020년 11월 4일
3

BackEnd

목록 보기
5/14

스레드 어디서 많이 들어봤는데 무슨 뜻일까? 위키백과의 정의는 다음과 같다.

스레드는 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위를 말한다. 일반적으로 한 프로그램은 하나의 스레드를 가지고 있지만, 프로그램 환경에 따라 둘 이상의 스레드를 동시에 실행할 수 있다. 이러한 실행 방식을 멀티스레드라고 한다.

이전 글에서 프로세스에 대해서 조사한 글이 있다. 스레드는 그 프로세스의 안에서 실제로 작업을 수행하는 주체를 의미하는 것이다.

이 그림을 보면 프로세스 안에 thread1 thread2 두가지 스레드가 있는 것을 볼 수 있다.




멀티 스레딩

멀티 스레드(multi thread)란 하나의 프로세스 내에서 둘 이상의 스레드가 동시에 작업을 수행하는 것을 의미한다. 멀티 스레드는 각 스레드가 자신이 속한 프로세스의 메모리를 공유한다.


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

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


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

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

작업 병렬성은 서로 다른 작업을 병렬 처리하는 것을 말한다. 대표적인 예는 웹 서버로, 각각의 브라우저에서 요청한 내용을 개별 스레드에서 병렬로 처리한다.



참고:

http://tcpschool.com/java/java_thread_concept
https://yolojeb.tistory.com/10

profile
Si vales bene, valeo

0개의 댓글