본문 바로가기

ETC/자료구조 , 알고리즘

프로세스와 쓰레드

이 글은 공부하는 내용을 정리하는 목적으로 작성하는 글이오니, 건전한 비판은 언제든 환영합니다.

프로세스와 쓰레드를 정확히 알아야 하는 이유?

먼저 RxSwift를 공부하기 위해 RxSwift는 비동기를 지원하는 라이브러리이다. 근데 왜 비동기를 무조건적으로 해야할까?에 대한 물음이 먼저였다.

회사에서도 개발자가 나 혼자다 보니, 그런 것을 생각하기 보다는 단순히 비동기는 여러작업을 같이 하는 것이다.라는 정의만 내렸고, 깊이 생각하지는 않았다.

 

코어

왜 먼저 코어와 쓰레드를 이야기 하냐면, 먼저 컴퓨터의 역사를 알고 개념이 더욱 명확해 질 것이기 때문에 먼저 적는다.

요즘 들어보면 4코어 8쓰레드, 8코어 16쓰레드라고 컴퓨터를 사기 전에 보는 글일 것이다.

예전에는 단일 CPU가 모든 작업을 시분할 시스템으로 작업을 할 수가 있었다.

시분할 시스템이란 하나의 CPU가 여러개를 왔다갔다 하면서, 작업하는 것이다. 예를 들면 나는 음악을 들으면서, 게임 다운로드를 받으면서, 그림을 그리고 있다. 시분할 시스템이 작동을 안하게 된다면은, 음악을 들으면서 나는 그림을 못 그린다. 음악이 다 끝나야지만 그림을 그릴 수 있다. 하지만 작업의 단위가 올라가게 되고, 단일 CPU에서는 온도가 올라가고 한계가 들어나기 때문에 코어가 늘어나게 되는 것이다. 즉 프로세스가 많아지는 것이다.

 

프로세스

그럼 프로세스란 무엇인가? 에 대해서, 프로세스는 운영체제로 부터 자원을 할당받는 작업의 단위입니다.

어떤 A라는 프로그램을 작동시킬 때 자원을 할당하여서 작업을 처리하는 일을 하게 됩니다.

 

쓰레드 

쓰레드는 할당받은 자원 내에서 실행하는 실행의 단위입니다. 프로세스 내에서 여러개를 작업할 수 있습니다.

이게 무슨 이야기냐면은, 하나의 프로세스 내에서 동시적으로 여러개의 작업이 들어갈 수 있습니다.

 

위에 그림과 같이 하나의 프로세스에서 동일하게 작업이 들어가게 됩니다. 예를 들면 나는 햄버거를 만들고 싶다라고 생각하면, 햄버거를 만들기 위해서는 패티를 굽고, 빵을 굽고, 야채를 넣어야 하며, 소스를 뿌려야 한다.

그러면 동시성으로 처리하기 위해 한 프로세스에서 여러개의 쓰레드를 작업한다. 만약에 A 프로세스에서 빵을 굽고, B 프로세스에서 패티를 굽는다면, 작업하기가 어려워 질 것이다. 하나의 프로세스에서 쓰레드를 돌린다면 작업이 수월하게 할 수 있을 것이다.

 

비동기와 동시성

비동기와 동시성은 보면, 똑같은 글이라고 생각할 것이다. 하지만 엄연히 다른 것이다.

위에 그림을 보면  작업1을 쓰레드1 에서 쓰레드2 로 작업을 보내고 그 사이에 작업2를 동시에 작업하는 것이 비동기이며,

동시성은 A,B,C라는 책이 있는데, 읽는 사람이 한명이면 하루는 A를 보고, 2일째는 B, 3일째는 C를 보면서 돌아가면서 책을 보는 것 입니다.

'ETC > 자료구조 , 알고리즘' 카테고리의 다른 글

에라토스테네스의 체, 소인수 분해  (0) 2023.09.05
재귀함수  (0) 2022.08.09
시간복잡도  (0) 2022.08.07
기본정렬  (0) 2022.05.18
완전탐색  (0) 2022.02.07