일반적으로 네트워크와 동기 비동기 함께 엮어서 생각.
(보통 메인에서) 분산처리 시킨 작업을 다른 한개의 쓰레드에서 처리
(보통 메인에서) 분산처리 시킨 작업을 다른 여러개의 쓰레드에서 처리
몇개의 쓰레드로 분산할지는 시스템이 알아서 경정, 다만 여러개의 쓰레드로 분산 처리
그럼 직렬처리가 왜 필요?
직렬 처리는 순서가 중요한 작업을 처리할 때 사용하고, 동시처리는 각자 독립적이지만 유사한 여러개의 작업을 처리할 때 사용한다.
synchronous : 번역을 해보면 동기라는 뜻을 가진다. 작업을 동시에 수행하거나, 동시에 끝나거나, 끝나는 동시에 시작함을 의미한다.
asynchronous : 번역을 해보면 비동기라는 뜻을 가진다. 시작, 종료가 일치하지 않으며, 끝나는 동시에 시작을 하지 않음을 의미한다.
동기(Sync) : 작업을 다른 쓰레드에서 하도록 시킨 후, 그 작업이 끝나길 "기다렸다가" 다음일을 진행한다.(기다렸다가 다음 작업을 생성할 수 있다.)
비동기(Async) : 작업을 다른 쓰레드에서 하도록 시킨 후, 그 작업이 끝나길 "안 기다리고" 다음 일을 진행한다. (안기다려도 다음 작업을 생성할 수 있다.)
동기적 (synchronous) : 프로그래밍에서 순서대로 작업을 수행하여 1개의 루틴을 완료하고 다른 루틴을 실행하는 방식
비동기적(asynchronous) : 여러 개의 루틴이 선행 작업의 순서나 완료 여부와 상관없이 실행되는 방식
비동기 프로그래밍은 RxJava, Reactive와 같은 서드파이 라이브러리에서 제공한다.
코틀린에서는 코루틴을 서드파티가 아닌 기본으로 제공한다.
해야할 일이 빨래, 설거지, 청소 3가지가 있다고 가정하자.
일반적으로 동기와 비동기의 차이는 메소드를 실행시킴과 동시에 반환 값이 기대되는 경우를 "동기(Sync)"라고 표현하고 그렇지 않은 경우에 대해서 "비동기(Async)"라고 표현한다.
💡 Synchronous
💡 Asynchronous
출처
https://www.youtube.com/watch?v=zRJOte7TaPw iOS 개발자 앨런 <프로그래밍에서 동기/비동기 개념에 대한 가장 직관적인 이해>
https://www.youtube.com/watch?v=oEIoqGd-Sns&t=589s 우아한 Tech [10분 테코톡] <멍토의 Blocking vs Non-Blocking, Sync vs Async>