Computer Science/Operating System
[운영체제] 멀티스레드 : Multi-thread (장단점, 멀티프로세스와 차이)
은정 Rachel
2020. 8. 9. 03:58
Multi-thread
아래 글에서는 프로세스와 스레드에 대한 기본적인 설명을 하지 않습니다.
프로세스와 스레드에 대한 내용은 여기를 참고해주세요 :)
멀티 스레딩(Multi-threading)이란?
- 하나의 프로세스를 다수의 실행 단위로 구분하여 자원을 공유하고 자원의 생성과 관리의 중복성을 최소화하여 수행 능력을 향상 시키는 것
- 하나의 프로그램에서 동시에 여러 개의 일을 수행할 수 있도록 해줌 (사실 분산처리를 통해 동시에 실행되는 것 처럼 보이는 것)
ex) 워드 프로세서에서 그림을 표시하고, 키 입력에 응답하며 철자 및 문법 검사를 계속 함
멀티 스레딩의 장점과 단점
장점
- 응답성 : 프로그램의 일부분(스레드)이 중단되거나 긴 작업을 수행하더라도 프로그램의 수행이 계속 되어 사용자에 대한 응답성이 증가한다.
ex) 멀티 스레드가 적용된 웹 브라우저 프로그램에서 하나의 스레드가 이미지 파일을 로드하고 있는 동안, 다른 스레드에서 사용자와 상호작용 가능 - 경제성 : 프로세스 내 자원들과 메모리를 공유하기 때문에 메모리 공간과 시스템 자원 소모가 줄어든다. 스레드 간 통신이 필요한 경우에도 쉽게 데이터를 주고 받을 수 있으며, 프로세스의 context switching과 달리 스레드 간의 context switching은 캐시 메모리를 비울 필요가 없기 때문에 더 빠르다.
- 멀티프로세서 활용 : 다중 CPU 구조에서는 각각의 스레드가 다른 프로세서에서 병렬로 수행될 수 있으므로 병렬성이 증가한다.
단점
- 임계 영역(Critical Section)? 둘 이상의 스레드가 동시에 실행하면 문제를 일으키는 코드 블록. 공유하는 자원에 동시에 접근하는 경우, 프로세스와는 달리 스레드는 데이터와 힙 영역을 공유하기 때문에 어떤 스레드가 다른 스레드에서 사용 중인 변수나 자료구조에 접근하여 엉뚱한 값을 읽어오거나 수정할 수 있다. 따라서 동기화가 필요!
- 동기화를 통해 스레드의 작업 처리 순서와 공유 자원에 대한 접근을 컨트롤할 수 있다. (Java에서
synchronized
키워드) 그러나 불필요한 부분까지 동기화를 하는 경우, 과도한 lock으로 인해 병목 현상을 발생시켜 성능이 저하될 가능성이 높기 때문에 주의해야 한다. 동기화 방법에는 뮤텍스와 세마포어가 있다. - context switching, 동기화 등의 이유 때문에 싱글 코어 멀티 스레딩은 스레드 생성 시간이 오히려 오버헤드로 작용해 단일 스레드보다 느리다.
멀티 프로세스와 멀티 스레드
- 동시에 두 가지 이상의 루틴을 실행할 수 있는 역할을 하는 것은 동일
멀티 프로세스 (Multi-process)
- fork를 통해 프로세스를 복사할 수 있는데, 부모-자식 관계라고 해도 환경변수와 프로세스 핸들 테이블이 상속 가능할 뿐, 자신만의 메모리 영역을 가진다.
- 프로세스 간 통신을 하려면 IPC(Inter Process Communication)를 통해야 한다.
멀티 스레드 (Multi-thread)
- 단일 프로세스의 컨텍스트 내에서 여러 스레드를 동시에 실행하는 것.
- 한 프로세스 내의 스레드들은 Code, Data, Heap 영역을 공유한다.
Reference
Xeros Security Lab - 멀티 쓰레딩과 멀티 프로세싱의 차이