컴퓨터를 켜서 유튜브 음악을 들으면서, 게임을 하고, 카톡을 하는 멀티 태스킹은 어떻게 가능한 것일까요? 멀티 태스킹을 가능하게 해주는 프로세스와 쓰레드에 대해서 정리해보겠습니다.
프로세스
프로세스는 프로그램이 실행중인 상태를 나타냅니다. 사용자가 프로그램을 실행하면 CPU는 보조 기억 장치에서 메인 메모리로 데이터를 가져와서 코드를 해석하며 작업을 합니다. 이때 메인 메모리에 올라와서 실행되고 있는 상태를 프로세스라고 합니다.
프로세스가 멀티 태스킹을 하기 위한 방법은 두 가지가 있습니다.
첫 번째는 병렬처리 입니다. 네 개의 작업이 있다고 할 때, 네 개의 코어가 있다면 한 개의 코어가 한 개의 작업을 맡아서 처리하면 됩니다.
두 번째는 병렬처리 입니다. 마찬가지로 네 개의 작업이 있다고 할 때, 두 개의 코어만 있습니다. 두 개의 코어는 서로 작업을 번갈아 가면서 처리하면 됩니다. 이때 작업을 바꾸는 것을 컨택스 스위칭(context switching)이라고 합니다. 이 처럼 여러 개의 프로세스를 함께 진행하는 것을 멀티 프로세싱이라고 합니다.
요리를 예시로 들어보겠습니다. 짜장면, 짬뽕, 탕수육 그리고 양장피 요리 주문이 있습니다. 주방에 쉐프가 네 명이면 각자 한 개씩 맡아서 처리하면 됩니다. 그런데 주방에 쉐프가 두 명이면 어느 쉐프는 짜장면과 짬뽕을 번갈아 가면서 만들고, 다른 쉐프는 탕수육과 양장피를 번갈아 가면서 만들게 됩니다. 쉐프는 요리를 바꿔가면서 만들어야 합니다 (컨택스 스위칭)
스레드
하나의 프로세스 안에서 여러 작업이 동시에 진행되기도 합니다. 인스타에서 메시지를 보내면서 오는 것을 확인하고, 스토리도 보고, 게시물도 봐야합니다. 이렇게 하나의 프로세스 안에서 여러 작업을 하는 것이 스레드 입니다. 스레드도 프로세스와 마찬가지로 컨택스 스위칭을 통해서 여러 작업을 처리합니다. 여러 스레드가 함께 진행되는 것을 멀티 스레드라고 합니다.
요리를 예시로 들어보겠습니다. 짜장면을 만들 때에 면을 삶고, 소스를 볶고, 양파를 썰어야 합니다. 탕수육을 만들 때에는 돼지고기를 썰고, 돼지고기를 튀기고, 소스를 만들어야 합니다.
프로세스와 스레드의 차이
이 둘의 가장 중요한 차이점은 메인 메모리를 어떻게 사용하는가 입니다.
멀티 프로세스에서 프로세스는 각자의 메모리 영역을 가지고 있습니다. 서로 공유하지 않습니다. 그래서 프로세스가 많아지면 그 만큼 메모리도 많이 필요해 집니다. 메모리 영역이 다르기 때문에 컨택스 스위칭할 때 부담이 됩니다.
반면 스레드는 메모리 영역을 구분하지 않습니다. A 프로세스에 할당된 메모리는 해당 프로세스의 모든 스레드가 공유합니다. 그래서 스레드가 많아져도 추가 메모리는 필요하지 않습니다. 또한, 메모리를 이동할 필요가 없기 때문에 컨택스 스위칭에 부담이 적습니다.
이론적으로 보면 멀티 스레드가 효율적인 방식이라고 생각됩니다. 그러나 메모리를 공유하는 환경이기 때문에 데이터 동기화의 문제를 고려해야 합니다. 개발자는 스레드를 사용할 때 이 부분을 고려해야 합니다.
참고
- 내용 : https://hongong.hanbit.co.kr/cpu가-멀티태스킹을-하는-방법-프로세스-vs-스레드/
- 이미지 : https://levelup.gitconnected.com/multi-threading-and-multiprocessing-in-python-3d5662f4a528
'IT > Java' 카테고리의 다른 글
자바의 비동기 API (0) | 2023.01.15 |
---|---|
Runnable과 Thread (0) | 2023.01.11 |
동시성(Concurrency) 과 병렬성(Parallel) (0) | 2023.01.10 |
Optional 클래스 사용 (0) | 2023.01.08 |
Map 처리 (0) | 2022.12.19 |