동기 : 데이터의 요청과 결과가 한 자리에서 동시에 일어나는 것
ex) 사용자가 데이터를 서버에게 요청한다면 그 서버가 데이터 요청에 따른 응답을 사용자에게 다시 리턴해주기 전까지 사용자는 다른 활동을 할 수 없으며 기다려야만합니다.
(+) 설계가 간단하고 직관적
(-) 결과가 전달될 때까지 대기
< 요청을 하면 시간이 얼마나 걸리던지 요청한 자리에서 결과가 주어져야 합니다 >
비동기 : 동시에 일어나지 않는다
ex) 서버에게 데이터를 요청한 후 요청에 따른 응답을 계속 기다리지 않아도되며 다른 외부 활동을 수행하여도되고 서버에게 다른 요청사항을 보내도 상관없습니다
(+) 요청 결과가 반환되는 동안 다른 작업 수행 가능
(-) 동기식보다 복잡
< 요청한 결과는 동시에 일어나지 않는다 >
참고자료 : https://velog.io/@slobber/%EB%8F%99%EA%B8%B0%EC%99%80-%EB%B9%84%EB%8F%99%EA%B8%B0%EC%9D%98-%EC%B0%A8%EC%9D%B4
https://private.tistory.com/24
-> 데이터의 불일치 문제가 발생할 수 있기 때문에 "동기화" 필요
발생 상황
1. kernel + interrupt
2. systemcall 발생 시 contextSwitching
3. Multi processor의 공유 메모리
Critical Section으로 인해 발생하는 문제들을 해결하기 위해서는 다음 조건들을 만족해야 한다.
1. Mutual Exclusion(상호 배제)
-> 이미 프로세스가 CS에서 작업 중이면 다른 모든 프로세스는 CS에 진입하면 안 된다.
Progress(진행)
-> CS에 작업 중인 프로세스가 없다면, CS에 진입하려는 프로세스가 있으면 진입 가능해야 한다.
Bounded Waiting(한정 대기)
-> CS에 진입하려는 프로세스가 무한정 기다려서는 안 된다.
Critical Section에서 발생 가능한 문제
1. DeadLock
2. Starvation