[OS] Sync / Async

Doodung·2022년 2월 8일
0

OS - 운영체제

목록 보기
6/15
post-thumbnail

🤔 동기 / 비동기

일반적으로 네트워크와 동기 비동기 함께 엮어서 생각.

직렬 처리

(보통 메인에서) 분산처리 시킨 작업을 다른 한개의 쓰레드에서 처리

동시 처리

(보통 메인에서) 분산처리 시킨 작업을 다른 여러개의 쓰레드에서 처리
몇개의 쓰레드로 분산할지는 시스템이 알아서 경정, 다만 여러개의 쓰레드로 분산 처리

그럼 직렬처리가 왜 필요?

  • 작업에 순서가 필요할 수도 있다.

언제, 어떤처리를 할까?

직렬 처리는 순서가 중요한 작업을 처리할 때 사용하고, 동시처리는 각자 독립적이지만 유사한 여러개의 작업을 처리할 때 사용한다.

동기와 비동기

synchronous : 번역을 해보면 동기라는 뜻을 가진다. 작업을 동시에 수행하거나, 동시에 끝나거나, 끝나는 동시에 시작함을 의미한다.
asynchronous : 번역을 해보면 비동기라는 뜻을 가진다. 시작, 종료가 일치하지 않으며, 끝나는 동시에 시작을 하지 않음을 의미한다.

동기(Sync) : 작업을 다른 쓰레드에서 하도록 시킨 후, 그 작업이 끝나길 "기다렸다가" 다음일을 진행한다.(기다렸다가 다음 작업을 생성할 수 있다.)
비동기(Async) : 작업을 다른 쓰레드에서 하도록 시킨 후, 그 작업이 끝나길 "안 기다리고" 다음 일을 진행한다. (안기다려도 다음 작업을 생성할 수 있다.)


동시성 프로그래밍

  • 동기와 비동기
    • 동기적 (synchronous) : 프로그래밍에서 순서대로 작업을 수행하여 1개의 루틴을 완료하고 다른 루틴을 실행하는 방식

    • 비동기적(asynchronous) : 여러 개의 루틴이 선행 작업의 순서나 완료 여부와 상관없이 실행되는 방식

      비동기 프로그래밍은 RxJava, Reactive와 같은 서드파이 라이브러리에서 제공한다.
      코틀린에서는 코루틴을 서드파티가 아닌 기본으로 제공한다.

해야할 일이 빨래, 설거지, 청소 3가지가 있다고 가정하자.

  • 이 일들을 동기적(Sync)으로 처리한다면 빨래를 하고 설거지를 한 뒤, 청소를 한다.
  • 비동기적으로(Async) 처리한다면 빨래하는 업체에게 빨래를 시키고, 설거지 대행 업체에 설거지를 시키고, 청소 대행 업체에 청소를 시킨다.
    셋 중 어떤 것이 먼저 완료될지는 알 수 없다. 일이 모두 마친 업체는 나에게 알려줄 것이니 나는 다른 작업을 할 수 있다.

일반적으로 동기와 비동기의 차이는 메소드를 실행시킴과 동시에 반환 값이 기대되는 경우를 "동기(Sync)"라고 표현하고 그렇지 않은 경우에 대해서 "비동기(Async)"라고 표현한다.



💡 Synchronous

  • 동시에 일어난다는 뜻. 요청과 그 결과가 동시에 일어난다는 약속
  • 바로 요청을 하면 시간이 얼마가 걸리던지 요청한 자리에서 결과가 주어져야한다.
  • 요청과 결과가 한 자리에서 동시에 일어난다
  • A노드와 B노드 사이의 작업 처리 단위(transaction)를 동시에 맞추겠다.

💡 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>

profile
반가워요!

0개의 댓글