티스토리 뷰
프로세스와 스레드의 차이(Process vs Thread)
프로세스는 컴퓨터로부터 자원을 할당 받아서 실행되는 프로그램을 의미합니다.
스레드는 프로세스가 할당받은 자원을 이용하여 실행하는 단위로 한 프로세스에는 여러 개의 스레드가 존재할 수도 있습니다. 이 때 스레드끼리는 서로 주소 공간이나 힙 공간을 공유할 수 있습니다.
멀티 프로세스 대신 멀티 스레드를 사용하는 이유
멀티 스레드를 하게 된다면 따로 프로세스를 생성하여 자원을 받는 시스템 콜을 하지 않아도 되고 프로세스 간의 통신보다 스레드 간의 통신이 더욱 빠르기 때문에 멀티 스레드를 이용합니다.
주의할 점은 전역 변수인 데이터 세그먼트를 이용할 때 충돌이 일어날 수 있습니다.
Thread-safe
멀티 스레드 환경에서 여러 스레드가 하나의 객체나 변수에 접근할 때 충돌을 방지하는 것을 의미합니다. 이를 위해 공유 자원에 접근하는 임계 영역을 동기화 기법으로 제어해주고 이를 상호 배제라고 합니다.
동기화 객체의 종류
뮤텍스와 세마포어가 있습니다.
뮤텍스는 공유된 자원에 여러 스레드가 접근하는 것을 막는 것을 말합니다. 이를 상호 배제라고도 하며 스레드의 실행 시간이 겹치지 않도록 조절합니다.
세마포어는 공유된 자원에 여러 프로세스가 접근하는 것을 막는 것을 말합니다. 공유 리소스에 접근할 수 있는 프로세스의 최대 허용치만큼 동시에 사용자가 접근할 수 있습니다. 만약 다른 사용자가 공유 리소스를 사용 중이라면 일정 시간을 기다려야 합니다.
뮤텍스와 세마포어의 차이
세마포어는 여러 개의 객체를 관리할 수 있으며 뮤텍스는 하나 밖에 관리하지 못합니다. 따라서 세마포어가 하나만 관리하게 된다면 뮤텍스가 될 수 있지만 뮤텍스는 세마포어가 되지 못합니다. 또한 뮤텍스는 소유한 스레드만 뮤텍스를 해제할 수 있지만 세마포어는 세마포어를 소유하고 있지 않아도 해제할 수 있습니다.
'TIL' 카테고리의 다른 글
[Java] StringBuffer (0) | 2024.06.21 |
---|---|
[OS] 가상 메모리, 동기와 비동기 (0) | 2022.08.15 |
[Network] DNS, RESTful (0) | 2022.08.02 |
[Network] Socket, PDU (0) | 2022.08.01 |
[Network] HTTP/HTTPS와 CORS (0) | 2022.07.31 |
- Total
- Today
- Yesterday