2022. 8. 14. 15:42ㆍiOS
동기(Sync) vs 비동기(Async)
둘 다 다른 쓰레드로 작업을 보내는 것은 동일하다.
- 동기(Sync) : 다른 쓰레드로 작업을 보내고, 그 작업이 끝날 때까지 기다린다. 작업이 끝나야 다른 작업을 시작할 수 있다.
- 비동기(Async) : 다른 쓰레드로 작업을 보내고, 그 작업이 끝나는 것을 기다리지 않고 다른 작업을 시작한다.
예를 들어보자. 나는 대학교에 있는 프린트집 사장이다. 나에게는 A, B, C,D 복사기가 4대가 있다. 학생 2명이 나에게 300장짜리 복사를 맡겼다.
- 동기(Sync) 일 경우 : A복사기에 100장 복사를 시작했다. 근데, 다른 복사기를 사용할 수 없다. A 복사기의 복사가 먼저 끝나야 하기 때문이다.

- 비동기(Async) 일 경우 : A 복사기에 100장 복사를 시작했다. A 복사기의 복사가 끝나는 것에 상관없이 B, C복사기에도 100장 복사를 시작했다.

작업의 순서에만 집중해서 보면, 차이가 극명하게 보일 것이다.
동기는 설계가 간단하고 직관적이지만, 결과가 주어질 때 까지 대기를 해야하는 단점이 있고, 비동기는 설계는 복잡하지만 자원을 효율적으로 사용할 수 있다는 장점이 있다.
동기(Synchronous)
- 시작한 작업이 완료가 되어야 그 다음 작업을 시작할 수 있음.
- 한번에 하나의 작업만 진행
- 하나의 작업이 끝나기 전까지 다른 작업에 대해서 수행할 수 없음 -> 작업 순서가 보장됨
- 어떤 작업이 수행중이라면 다음 작업은 대기해야 함
- 결과의 순서가 중요한 경우에는 동기 코드로 작성을 해야 함.

비동기(Asynchronous)
- 시작한 작업이 완료되지 않더라도 그 다음 작업을 시작함
- 한번에 여러 작업을 진행할 수 있음
- 하나의 작업이 끝나지 않았더라도 다른 작업에 대해서 수행할 수 있음
- 즉, 작업이 먼저 실행되었다 하더라도 먼저 끝나는 것은 아님 -> 작업 순서가 보장되지 않음
- ex) 커피 만드는 일이 먼저 실행되었다 하더라도 프라푸치노 만드는 작업이 먼저 끝날 수 있음
- 동시에 작업을 실행할 수 있기에, 비동기 코드로 작성하는 것이 효율적이라고 생각할 수 있지만, 결과의 순서가 보장이 되지 않기에 결과의 순서가 중요한 경우 비동기로 작성하면 좋지 않음
- 동기 코드가 모두 실행되고 난 후에 비동기 코드 실행

동기(Sync) | 비동기(Async) | |
정의 | 요청에 대한 응답이 동시에 이루어져야 한다 때문에 모든 작업을 순차적으로 진행한다 |
요청에 대한 결과가 동시에 일어나지 않는다 때문에 모든 작업을 동시에 진행한다 |
장점 | 설계가 매우 간단하고 직관적임 | 응답이 주어질 때까지 기다리지 않고 다른 작업을 하므로 자원을 효율적으로 사용할 수 있다 |
단점 | 응답이 주어질 때까지 아무 것도 못하고 대기해야 한다 | 동기보다 설계가 복잡하다 |
추가적 으로 알아야 할 내용이 있다.
직렬처리 와 동시처리 이다.
직렬처리 - 다른 하나의 쓰레드로만 보내는것
동시 처리 - 한개의 쓰레드가 아닌 여러개의 쓰레드로 분산해서 처리된다
그리고 몇개의 쓰레드로 분산할지는 시스템이 알아서 결정, 다만 여러개의 쓰레드로 분산 처리
이런 내용인데 정리하자면 !
직렬 처리 - 다른 한개의 쓰레드에서 처리
동시 처리 - 다른 여러개의 쓰레드에서 처리
직렬처리의 필요성은 작업에 순서가 필요할 수도 있다.
직렬처리 - 순서가 중여한 작업을 처리할때 사용
동시처리 - 각자 독립적이지만 유사한 여러개의 작업을 처리할때 사용
그리고 마지막으로 동시처리와 비동기 처리가 비슷하다고 생각하는데.. 사람들은 다르다고 말한다..
비동기 동시 서로 다르다
비동기는 작업을 보내는 쓰레드 관련
쓰레드 넘긴건 기다릴지말지
동시
메인 쓰레드에서 다른쓰레드로 보낼떄
다른쓰레드로 보내질때 1개냐 여러개냐 나눌때 쓰는개념이라고한다.. 음.. 잘 이해가 안가는 부분이긴하다..
'iOS' 카테고리의 다른 글
JSON Decoder 대해 알아보자! (0) | 2022.09.06 |
---|---|
Codable 을 알아보자! (0) | 2022.09.06 |
브레이크 포인트 다루기 (0) | 2022.07.02 |
Xcode 의 각 영역과 명칭 (0) | 2022.07.02 |
델리게이트 패턴이란? (0) | 2022.06.13 |