본문 바로가기

Sparta/면접준비

동기 비동기 차이, Deadlock

1. 동기(Synchronous) / 비동기(As ynchronous)의 차이점은 요청과 결과가 동시에 일어나는 지에 대한 여부이다. 동기는 말 그대로 현재 작업의 응답과 다음 작업의 요청가 동시에 일어난다는 약속(Promise)이다. 요청을 하면 시간이 얼마나 걸리든지 요청한 자리에서 결과가 주어져야하고 순서에 맞춰 진행되는 장점이 있지만, 여러 요청을 동시에 처리할 수 없다. 

반대로, 비동기는 요청과 결과가 동시에 일어나지 않은 것이라는 약속이다. 하나의 요청에 따른 응답을 즉시 처리하지 않아도 그 시간동안 또 다른 요청에 대해 처리가 가능한 방식이다. 여러개의 요청을 동시에 처리할 수 있는 장점이 있지만 동기보다 속도가 떨어질 수 있다. 그리고 순서를 보장하지 않기 때문에 비동기를 동기처럼 보이게 하는 Promise나 async/await를 이용해서 개발자가 순서를 임의로 정하는 것이다.

 

 

2. Deadlock : 직역하면 교착상태라는 뜻인데, 프로세스가 자원을 얻지 못해 다음 처리를 하지 못하는 상태로 시스템적으로 한정된 자원을 여러 곳에서 사용하려고 할 때 발생한다. 한 시스템 내에서 네가지 조건이 동시에 성립할 때 발생하는데, 상호배제, 점유대기, 비선점, 순환대기가 바로 그것이다.

 

1) 상호배제: 자원은 한번에 한 프로세스만이 사용할 수 있어야 한다는 것으로 여러 개의 프로세스가 공유자원을 사용할 수 있게 하면 부정할 수 있다.

2) 점유대기: 최소한 하나의 자원을 점유하고 있으면서 다른 프로세스에 할당되어 사용하고 있는 자원을 추가로 점유하기 위해 대기하는 프로세스가 있어야 한다는 것으로 프로세스가 실행되기 전 필요한 모든 자원을 할당하여 부정할 수 있다.

3) 비선점 : 다른 프로세스에 할당된 자원은 사용이 끝날 때까지 강제로 빼앗을 수 없어야 한다는 것으로 자원을 점유하고 있는 프로세스가 다른 자원을 요구할 때 점유하고 있는 자원을 반납하고 요구한 자원을 사용하기 위해 기다리게 하면 부정할 수 있다.

4) 순환대기: 프로세스가 상대방이 필요한 자원을 점유한 상태로 상대방이 가지고 있는 자원을 요청하고 있는 상태로 순환 구조를 이룬다는 것인데, 자원에 고유한 번호를 할당하고, 번호순대로 자원을 요구하도록 하면 부정할 수 있다.