티스토리 뷰

TIL

[OS] 프로세스와 스레드, Thread-safe

Redirect 2022. 8. 13. 00:39
728x90

프로세스와 스레드의 차이(Process vs Thread)

프로세스는 컴퓨터로부터 자원을 할당 받아서 실행되는 프로그램을 의미합니다.

스레드는 프로세스가 할당받은 자원을 이용하여 실행하는 단위로 한 프로세스에는 여러 개의 스레드가 존재할 수도 있습니다. 이 때 스레드끼리는 서로 주소 공간이나 힙 공간을 공유할 수 있습니다.

 

728x90

멀티 프로세스 대신 멀티 스레드를 사용하는 이유

멀티 스레드를 하게 된다면 따로 프로세스를 생성하여 자원을 받는 시스템 콜을 하지 않아도 되고 프로세스 간의 통신보다 스레드 간의 통신이 더욱 빠르기 때문에 멀티 스레드를 이용합니다.

주의할 점은 전역 변수인 데이터 세그먼트를 이용할 때 충돌이 일어날 수 있습니다.

 

 

Thread-safe

멀티 스레드 환경에서 여러 스레드가 하나의 객체나 변수에 접근할 때 충돌을 방지하는 것을 의미합니다. 이를 위해 공유 자원에 접근하는 임계 영역을 동기화 기법으로 제어해주고 이를 상호 배제라고 합니다.

 

 

동기화 객체의 종류

뮤텍스와 세마포어가 있습니다.

뮤텍스는 공유된 자원에 여러 스레드가 접근하는 것을 막는 것을 말합니다. 이를 상호 배제라고도 하며 스레드의 실행 시간이 겹치지 않도록 조절합니다.

세마포어는 공유된 자원에 여러 프로세스가 접근하는 것을 막는 것을 말합니다. 공유 리소스에 접근할 수 있는 프로세스의 최대 허용치만큼 동시에 사용자가 접근할 수 있습니다. 만약 다른 사용자가 공유 리소스를 사용 중이라면 일정 시간을 기다려야 합니다.

 

 

뮤텍스와 세마포어의 차이

세마포어는 여러 개의 객체를 관리할 수 있으며 뮤텍스는 하나 밖에 관리하지 못합니다. 따라서 세마포어가 하나만 관리하게 된다면 뮤텍스가 될 수 있지만 뮤텍스는 세마포어가 되지 못합니다. 또한 뮤텍스는 소유한 스레드만 뮤텍스를 해제할 수 있지만 세마포어는 세마포어를 소유하고 있지 않아도 해제할 수 있습니다.

728x90

'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
300x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크