동기는 말 그대로 동시에 일어난다는 뜻입니다.
요청과 그 결과가 동시에 일어난다는 약속인데요. 바로 요청을 하면 시간이 얼마나 걸리던지 요청한 자리에서 결과가 주어져야 합니다.
비동기는 동시에 일어나지 않는다를 의미합니다.
요청과 결과가 동시에 일어나지 않을거라는 약속입니다.
동기
비동기
동기
비동기
예를 들어. 나는 대학교에 있는 프린트집 사장이다. 나에게는 A, B, C, D 복사기 4대가 있다. 학생 2명이 나에게 300장짜리 복사를 맡겼다.
작업의 순서에만 집중해서 보면, 차이가 극명하게 보일 것이다.
동기는 설계가 간단하고 직관적이지만, 결과가 주어질 때 까지 대기를 해야하는 단점이 있고, 비동기는 설계는 복잡하지만 자원을 효율적으로 사용할 수 있다는 장점이 있다.
분산처리 시킨 작업을 오직 한 개의 쓰레드에서만 처리하는 것이 직렬이다.
즉 A쓰레드에서 4개의 작업을 분산 처리 시켰는데, B스레드에서만 처리하는 것이다.
몇개의 쓰레드로 분산할지는 시스템이 정하지만, 시스템이 정한 여러개의 쓰레그로 분산 처리하는 것이 동시이다.
작업들이 각자 독립적이지만 유사한 작업들일 때 굉장히 유용하다. (ex) 테이블뷰 셀 같은 것들을 서버에서 받아오는 것 )
동기와 비동기는 메인 쓰레드에서 대기열을 어떤 방식으로 처리할지 정하는 것.
직렬과 동시는 어떤 대기열을 사용할 지 정하는 것
작동되는 개념이 비슷하다고 절대 혼용하지 말자. 아예 다른 개념이다.
바로 작업의 '순서'가 중요할 때 직렬이 사용된다.
동시는 여러개의 쓰레그에서 분산 작업하기 때문에 순서를 상관하지 않고 쓰레드에 할당된 작업은 각 쓰레드가 모조리 처리한다. 따라서, 만약 어떤 작업이 꼭 먼저 이뤄져야 한다면, 그럴때는 직렬을 사용하는게 좋다.
프로그램의 성능/반응성 을 올리고 최적화를 하기 위해서 하는 것이 동시성 프로그래밍이다.