- 요청과 그에 따른 결과가 동시에 일어나는 것
- 즉 요청 후 결과가 와야만, 그 다음 작업이 이루어지는 방식
🤦♀️어떠한 일을 처리하는 동안 다른 일을 할 수 없다.
- 요청과 그 결과가
동시에 일어나지 않는 것- 요청 후 결과가 오는 동안, 그 다음 작업이 이루어지는 방식
👍 동기보다 복잡하지만, 일을 처리하면서도 다른 쪽에서도 일을 할 수 있어 효율적임.
'블로킹'/'논-블로킹'은 동기/비동기와 관점이 다르고, 제어권이 어디에 있느냐에 대한 관점이다.
블로킹
호출된 함수가 자신의 작업을 모두 끝날 때 까지 제어권을 갖고 있어 호출한 함수가 대기하도록 함
논-블로킹
호출된 함수가 바로 return 해서 호출한 함수에게 제어권을 주어 다른 일을 할 수 있게 함
A와 B를 동일하게 만드는 작업이다. 즉 여러 프로세스가 공유하는 자원의 일관성을 유지하는 것.
=> 공유하는 자원에 하나의 프로세스만이 이용하도록 제어
여러 프로세스나 스레드가 '동기화 메커니즘' 없이 자원에 접근하려는 상황을 가리킵니다. 공유된 자원에 대한 접근 순서에 따라 실행 결과가 달라질 수 있는 상황을 의미
동일한 자원에 동시에 접근하는 작업(ex. 공유하는 변수 사용, 동일 파일 접근 및 수정 등)을 실행하는 코드 영역을 뜻함.
- 즉 동시에 접근하려고 하는 자원에서 문제가 발생하지 않게 독점을 보장해줘야 하는 영역
=>멀티 스레딩의 문제점 중 하나
ex) 이해 꿀팁: 화장실 키를 들고 갔다로 이해하자
뮤텍스는 상태가 오직 획득(Lock) / 해제(Unlock)만 존재한다
(정의)
임계영역에 진입하는 프로세스는 'Lock'을 획득 -> 영역을 나올 때, 'Lock'을 방출
(한계) 다중처리기 환경에서는 시간적인 효율성 측면에서 적용이 어려움.
스핀락과 뮤택스와 달리 표현형이 정수형으로, 하나 이상의 컴포넌트가 공유자원에 접근할 수 있게 허용한다. 소프트웨어상에서 임계영역 문제를 해결하기 위한 동기화 도구로 2가지로 나뉘어진다.
ex) 이해 꿀팁 🤔:
세마포어는 화장실이 여러 개 있고, 화장실 입구에는 현재 빈 화장실의 개수를 알려주는 전광판이 있는 식당과 비슷하다.
모든 칸의 화장실이 사용중일 때 전광판의 숫자는 0이 되며, 손님들은 전광판 숫자가 1로 바뀔 때까지 대기해야한다.
카운팅 세마포
이진 세마포
'뮤텍스'는 상태가 0, 1 두 개 뿐인 binary Semaphore 라고 볼 수 있다.
'세마포어'는 프로세스(스레드)가 소유할 수 없는 반면, '뮤텍스'는 소유가 가능하며 프로세스(스레드)가 이에 대한 책임을 진다. (Mutex 의 경우 상태가 두개 뿐인 lock 이므로 lock 을 ‘가질’ 수 있다.)
'뮤텍스'는 동기화 대상이 오직 하나뿐일 때, '세마포어'는 동기화 대상이 하나 이상일 때 사용한다.
'세마포어'는 시스템 범위에 걸쳐있고 파일 시스템 상의 파일 형태로 존재한다.
반면 '뮤텍스'는 프로세스 범위를 가지며 프로세스가 종료될 때 자동으로 해제된다.
두 개 이상의 작업이 서로 상대방의 작업이 끝나기만을 기다리기 때문에 아무것도 완료되지 못하고 있는 상태
1. 상호배제 : 하나의 프로세스가 자원을 사용중일 때 다른 프로세스는 그를 사용할 수 없다.
2.점유 대기 : 최소 하나의 자원을 점유하고 있으면서 다른 프로세스가 사용중인 자원을 추가로 점유하기 위해 대기하는 프로세스가 존재한다.
3. 비선점 : 다른 프로세스가 자원을 사용중인 경우 그 사용이 끝날 때 까지 강제로 뺏을 수 없다.
4. 순환 대기 : 프로세스의 집합에서 순환형태로 자원을 대기하고 있어야 한다.
조건 중 하나를 제거하면서 예방.
프로세스가 자원을 요구할 때 시스템은 자원을 할당한 후에도 안정 상태로 남아있게 되는지 미리 검사하여 교착 상태를 회피한다.
교착상태 발생시, 해결한다와 성능저하가 심할 경우 무시한다.
특정 프로세스의 우선 순위가 낮아서 원하는 자원을 계속 할당받지 못하는 상태를 말함.