동기, 비동기 / 직렬, 동시

김상은·2022년 9월 22일
0

CS

목록 보기
1/1

동기(synchronous : 동시에 일어나는)


동기는 말 그대로 동시에 일어난다는 뜻입니다.

요청과 그 결과가 동시에 일어난다는 약속인데요. 바로 요청을 하면 시간이 얼마나 걸리던지 요청한 자리에서 결과가 주어져야 합니다.

  • 요청과 결과가 한자리에서 동시에 일어남
  • A노드와 B노드 사이의 작업 처리 단위(transaction)를 동시에 맞추겠다.
  • 동기 방식은 서버에서 요청을 보냈을 때 응답이 돌아와야 다음 동작을 수행할 수 있다. 즉 A작업이 모두 진행 될때까지 B작업은 대기해야 한다.

비동기(Asynchronous : 동시에 일어나지 않는)


비동기는 동시에 일어나지 않는다를 의미합니다.

요청과 결과가 동시에 일어나지 않을거라는 약속입니다.

  • 요청한 그 자리에서 결과가 주어지지 않음
  • 노드 사이의 작업 처리 단위를 동시에 맞추지 않아도 된다.
  • 비동기 방식은 요청을 보냈을 때 응답 상태와 상관없이 다음 동작을 수행 할 수 있다. 즉 A작업이 시작하면 동시에 B작업이 실행된다. A작업은 결과값이 나오는대로 출력된다.

이미지


각각의 장점


동기

  • 설계가 매우 간단하고 직관적이다

비동기

  • 동기보다 복잡하다

각각의 단점


동기

  • 결과가 주어질 때까지 아무것도 못하고 대기해야 한다.

비동기

  • 결과가 주어지는데 시간이 걸리더라도 그 시간동안 다른 작업을 할 수 있으므로 자원을 효율적으로 사용할 수 있다.

예시


예를 들어. 나는 대학교에 있는 프린트집 사장이다. 나에게는 A, B, C, D 복사기 4대가 있다. 학생 2명이 나에게 300장짜리 복사를 맡겼다.

  • 동기일 경우 : A복사기에 100장 복사를 시작했다. 근데, 다른 복사기를 사용할 수 없다. A복사기의 복사가 먼저 끝나야 하기 때문이다.
  • 비동기일 경우 : A복사기에 100장 복사를 시작했다. A복사기의 복사가 끝나는 것에 상관없이 B, C복사기에도 100장 복사를 시작했다.

작업의 순서에만 집중해서 보면, 차이가 극명하게 보일 것이다.

동기는 설계가 간단하고 직관적이지만, 결과가 주어질 때 까지 대기를 해야하는 단점이 있고, 비동기는 설계는 복잡하지만 자원을 효율적으로 사용할 수 있다는 장점이 있다.

동기와 비동기의 개념을 이해했으면 Serial 과 Concurrent에 대해서도 알아보자.

직렬


분산처리 시킨 작업을 오직 한 개의 쓰레드에서만 처리하는 것이 직렬이다.

즉 A쓰레드에서 4개의 작업을 분산 처리 시켰는데, B스레드에서만 처리하는 것이다.

동시


몇개의 쓰레드로 분산할지는 시스템이 정하지만, 시스템이 정한 여러개의 쓰레그로 분산 처리하는 것이 동시이다.

작업들이 각자 독립적이지만 유사한 작업들일 때 굉장히 유용하다. (ex) 테이블뷰 셀 같은 것들을 서버에서 받아오는 것 )

의문들


  1. 동시랑 비동기랑 비슷한 개념인가?
  2. 직렬은 대체 왜 사용하지? 동시가 모든경우에 좋아 보인다.

비동기와 동시는 비슷해 보이지만 아예다른 개념이다


동기와 비동기는 메인 쓰레드에서 대기열을 어떤 방식으로 처리할지 정하는 것.

직렬과 동시는 어떤 대기열을 사용할 지 정하는 것

작동되는 개념이 비슷하다고 절대 혼용하지 말자. 아예 다른 개념이다.

직렬을 사용하는 이유


바로 작업의 '순서'가 중요할 때 직렬이 사용된다.

동시는 여러개의 쓰레그에서 분산 작업하기 때문에 순서를 상관하지 않고 쓰레드에 할당된 작업은 각 쓰레드가 모조리 처리한다. 따라서, 만약 어떤 작업이 꼭 먼저 이뤄져야 한다면, 그럴때는 직렬을 사용하는게 좋다.

프로그램의 성능/반응성 을 올리고 최적화를 하기 위해서 하는 것이 동시성 프로그래밍이다.

profile
🐢 기초부터 천천히 하고픈 고등학생 개발자 🐢

0개의 댓글