동기(Synchronous)란
- 요청과 결과가 동시에 일어나는 방식으로 요청을 보낸 뒤 응답을 받아야 다음 동작이 진행된다.
- 작업이 실행될 때 해당 작업이 완료 될 때까지 다른 작업을 수행하지 않는다.
- 요청을 하면 시간이 얼마나 걸리던지 요청한 자리에서 결과가 주어져야 한다.
- 보통 목적이 같은 일을 진행한다.
비동기(Asynchronous)란?
- 요청과 결과가 동시에 일어나지 않는 방식으로 요청을 보낸 뒤 응답과 상관없이 진행된다.
- 요청을 받는 스레드와 요청에 대해 처리하는 스레드를 따로 두는 방식이다.
- 요청한 결과가 그 자리에서 주어지지 않는다.
- 추구하는 목적이 다를 수 있다.
동기 방식의 예시
A가 B에게 10,000원 송금하는 경우
- A의 계좌는 10,000을 송금할 예정이다.
- B의 계좌에 10,000을 송금한다.
- B의 계좌는 10,000을 받았다는 것을 인지하고 A의 계좌에게 10,000을 받았다고 전송한다.
- A 계좌에서 -10,000 B 계좌에 + 10,000가 동시 발생하였다.
A의 계좌와 B의 계좌는 서로 요청과 응답을 확인한 후 같은 일을 동시에 진행했다.
비동기 방식의 예시
- 1.학생이 시험 문제를 푼다.
- 2.학생은 선생님에게 다 푼 시험지를 전달한다.
- 3.선생님은 학생의 시험지를 채점한다.
- 4.채점이 완료 된 시험지를 학생에게 전송한다.
- 5.학생은 선생님이 전송한 시험지를 받아 결과를 확인한다.
학생과 선생님은 시험지라는 연결고리가 있지만 시험지에 행하는 목적은 서로 다르기 때문에 둘의 작업 처리 시간은 일치하지 않고, 일치할 필요가 없다.
동기의 장점
- 설계가 간단하고 직관적이다
- 코드를 파악하기 쉽고, 유지보수, 디버깅이 쉽다.
(코드가 순서대로 실행되기 때문에 Breakpoint를 한 단계씩 늘려가면서 디버깅을 진행하면 에러를 발견하기 용이하다.)
동기의 단점
- 결과가 주어질 때까지 아무것도 못하고 대기해야 된다.
(성능저하의 원인이 될 수 있다.)- 입출력 요청이 있을 경우 입출력 처리가 끝날때까지 스레드가 메모리버퍼에 데이터를 차지하기 때문에 입출력 요청이 처리되는 동안 메모리가 낭비되는 상황이 생길 수 있다.
스레드란?
어떠한 프로그램 내에서 실행되는 흐름의 단위
비동기의 장점
- 결과가 주어지는데 시간이 걸리더라도 그 시간동안 다른 작업을 수행 할 수 있다.
(자원을 효율적으로 사용할 수 있다.)- 요청에 따라 스레드를 새로 생성하는 것이 아니기 때문에 동기방식에 비해 메모리 점유율이 낮다.
비동기의 단점
- 동기보다 설계 방식이 복잡하다.
- 코드가 동기방식보다 여럽고 유지보수, 디버깅이 동기방식보다 어렵다.
동기와 비동기의 차이
- 프로그램의 작업 처리 방식
- 동기 : 요청과 그 결과가 동시에 일어나는 작업을 순차적으로 처리한다.
- 비동기 : 요청과 그 결과가 동시에 일어나지 않아 순차적으로 처리하지 않는다.
- 요청에 다른 응답 처리 방식
- 동기 : 응답이 돌아올 때 까진 다른 활동을 할 수 없다.
- 비동기 : 응답을 기다리지 않고 대기 시간동안 다른 요청에 대한 처리가 가능하다.
🙇 참고 사이트 🙇
https://dev-coco.tistory.com/46 https://inpa.tistory.com/entry/%F0%9F%91%A9%E2%80%8D%F0%9F%92%BB-%EB%8F%99%EA%B8%B0%EB%B9%84%EB%8F%99%EA%B8%B0-%EB%B8%94%EB%A1%9C%ED%82%B9%EB%85%BC%EB%B8%94%EB%A1%9C%ED%82%B9-%EA%B0%9C%EB%85%90-%EC%A0%95%EB%A6%AC https://tang25.tistory.com/entry/%EC%BB%B4%ED%93%A8%ED%84%B0-%EA%B3%BC%ED%95%99-CS%EB%8F%99%EA%B8%B0%EC%99%80-%EB%B9%84%EB%8F%99%EA%B8%B0-%EB%B8%94%EB%A1%9C%ED%82%B9-%EB%85%BC%EB%B8%94%EB%A1%9C%ED%82%B9 https://spidyweb.tistory.com/23