->동기란 ?? 누군가에게 일을 부탁하고 그 일이 끝나기까지 기다리는것
->비동기란 ?? 끝나면 말해라고 하고 다른 일을 하는것, 비동기에선 처리를 병행해서 진행할 수 있다
-> 동기는 처리를 명령하고 끝나기까지 기다리기때문에 의뢰가 끝났는지 여부를 확인가능
-> 비동기는 처리를 명령하고 병렬로 다른 일을 할 수 있기에 의뢰한 일이 끝났는지 여부를 확인하고싶다면 다른 방법을 이용해야함
-> 예를 들어서 구글에 Ajax에선 비동기통신을 이용한 병렬처리가 가능한데 기존에 Ajax가 없을때엔 웹 사이트에서 무언가 클릭하거나 할때 화면이 바뀌는것을 기다리기까지 아무것도 할 수 없었는데 비동기통신이 가능해지면서 검색어에 무언가 적을때 검색어 후보가 나온다던가 이런 유연한 처리가 가능해졌다
-> DBMS에서도 사용하고 있는 예로 사실 거대한 데이터를 처리하는 DBMS에서 비동기 I/O는 적합하다고 할 수 있다, 공유 메모리에 있는 다수의 데이터를 프로세스가 HDD에 기록할때 비동기 I/O로 하나의 I/O를 기다리지않고 저장소 성능을 충분히 활용 가능
장점: 의뢰한 처리가 끝났는지 여부를 쉽게 확인 가능, 구조가 간단하고 구현 난이도가 낮음
단점: 의뢰한 처리가 끝나기까지 기다려야하기에 대기 시간을 활용할 수 없음
장점: 의뢰한 처리가 진행되고 있는 동안 시간을 효율적으로 사용해 병렬처리 가능 단점: 의뢰한 처리가 끝났는지 확인하지않으면 모르기에 불필요한 확인처리가 늘어남, 구조가 복잡해서 구현난이도가 높음
-> 비동기로 요구한 처리가 끝나지 않은 상태에서 다음 처리를 진행해도 문제가 없는지
-> 비동기로 요구한 처리가 끝났는지 확인할 필요가 있는지
-> 그렇다고 동기로 처리하면 대기 시간이 너무 길어져 현실조건을 만족하지 못하는 경우도 있음
-> 즉, 각각의 장단점을 잘 고려해 사용하는것이 중요