[CS] 동시성 프로그래밍 vs 비동기 프로그래밍

2024. 8. 3. 14:44·CS

 비동기 프로그래밍과 동시성 프로그래밍.. 말로만 들으면 말장난 마냥 두 개가 뭐가 다르지? 둘 다 여러 일을 한 번에 처리하는거 아닌가? 라는 생각이 들었다..
 이 애매모호한 개념을 확실히 하기 위해 정리를 해보겠다.

 둘의 차이점을 제대로 이해하기 위해서 비동기, 동시 각각의 단어의 반대말을 찾아보았다.
(보통 이렇게 비슷한 단어가 있으면 각각의 반대말을 찾아서 비교하는 것이 도움이 될 때가 많다.)

먼저 비동기의 반대말을 알아보자. (찾아봤는데 크게 와닿는 설명이 잘 없어서 내가 이해한대로 작성해보고자 한다..)

비동기(Asynchronous)의 반대말은 동기(Synchronous)이다.

비동기(Asynchronous)적이라는 것은 하나의 작업을 실행시키고 해당 작업이 끝날때까지 기다리지 않고 바로 다음 작업으로 넘어가는 것을 말한다. (”기다리지 않는다”가 포인트 !)

동기(Synchronous)적이란 하나의 작업을 실행시키면 해당 작업이 끝날 때까지 다른 작업을 실행시키지 않고 기다리는 것을 말한다. (”기다린다”가 포인트 !)

그럼 동시의 반대말을 알아보자.

동시(Concurrent)의 반대말은 직렬(Serial)이다.

동시(Concurrent)이란 논리적인 용어로 동시에 실행되는 것처럼 보이는 것을 말한다. (”논리적으로”가 포인트 !)

직렬(Serial)이란 한 번에 하나의 작업만 실행하는 것으로 하나의 스레드 안에서 여러 작업이 순차적으로 진행되는 것을 말한다.

아니 근데 잠깐. 과학시간에 직렬의 반대말은 병렬이라고 배웠는데 이게 뭔..?

동시성 프로그래밍 말고 병렬(Parallel)적 프로그래밍도 존재한다 ..!

병렬(Parallel)은 멀티 코어에서 멀티 스레드를 동작시키는 방식으로 물리적으로 여러 작업을 동시에 실행시키는 것이다.

위에서 동시(Concurrent)를 설명할 때 “논리적으로”가 포인트라고 말했던 이유가 여기있다.

병렬과 동시의 차이점은 물리적인가 물리적이지 않은가에 있다. 병렬은 실제 물리적으로 여러 작업을 실행시키는 것을 말하지만, 동시는 실제로 여러 작업이 실행되는 것은 아니지만 그렇게 보이게끔 하는 것을 말한다. (context switching을 통해 동시성을 구현할 수 있다.)

나같은 경우 아래 그림을 보고 단번에 이해가 갔다 !

총 정리를 해보면 아래와 같다.

  • 동기 vs 비동기
    • 비동기(Asynchronous): 작업을 다른 스레드에서 시키고, 바로 내 할 일을 한다.
    • 동기(Synchronous): 다른 스레드로 보낸 작업이 끝날때까지 기다린다.
  • 직렬 vs 동시
    • 직렬(Serial): 하나의 스레드로만 작업들을 보낸다. (작업 순서가 중요할 경우)
    • 동시(Concurrent): 여러 스레드로 작업을 분산시켜 보낸다.
  • 병렬 vs 동시성
    • 병렬(Parallel): 멀티 코어에서 멀티 스레드를 사용해 실제로(물리적으로) 여러 작업을 한 번에 실행시킨다.
    • 동시(Concurrent): 싱글 코어에서 멀티 스레드를 사용하여 논리적으로 여러 작업이 한 번에 실행되는 것처럼 보이게 한다.

끗 ~

  • 참고자료
 

[Swift]비동기(Async) ≠ 동시성(Concurrency) feat. 병렬성(Parallel)

비동기(async) ≠ 동시성(concurrency)다시 한번 강조 !!비동기(async)와 동시성(concurrency)은 다르단다..뭐지?? 단어가 다른건 알겠는데 거기서 거기 아닌가..? 전 처음 들었을 때 무슨 말장난인줄 알았습

codingmon.tistory.com

 

 

[CS] 동기 vs. 비동기 / 직렬 vs. 동시

🌈 iOS개발자 앨런의 프로그래밍에서 동기/비동기 개념에 대한 가장 직관적인 이해를 보고 정리한 글입니다. 📍 동기 vs. 비동기 1) 동기(Synchronous) 작업을 다른 스레드에 보내고 해당 작업이 끝

velog.io

 

 

GCD vs Operation Queue

Content Similar Posts Comments

caution-dev.github.io

 

 

동시성 프로그래밍/ 비동기 프로그래밍

이번 시간에 배울 것은 1\. 프로세서, 코어, 프로그램과 프로세스, 스레드의 개념에 대해 알아봅시다 2\. 비동기 프로그래밍과 동시성 프로그래밍에 대해 알아봅시다3\. 병렬성 프로그래밍에 대해

velog.io

저작자표시 (새창열림)

'CS' 카테고리의 다른 글

[CS - iOS] Coordinator Pattern  (5) 2024.10.12
[CS - iOS] 동시성 프로그래밍 (feat. GCD, OperationQueue)  (0) 2024.08.08
[CS - iOS] 프로세스와 스레드 관리  (0) 2024.05.02
'CS' 카테고리의 다른 글
  • [CS - iOS] Coordinator Pattern
  • [CS - iOS] 동시성 프로그래밍 (feat. GCD, OperationQueue)
  • [CS - iOS] 프로세스와 스레드 관리
00me
00me
얼렁뚱땅 방장이 운영하는 기술 블로그
  • 00me
    영미의 iOS 다이어리
    00me
  • 전체
    오늘
    어제
    • 프로그래밍 (29)
      • 📖 (0)
      • CS (4)
      • Python (5)
      • Swift (5)
      • iOS (3)
      • 코테 (3)
        • 자료구조 (0)
        • 알고리즘 (3)
      • 회고 (9)
  • 링크

    • 🍧 GitHub
  • 인기 글

  • hELLO· Designed By정상우.v4.10.3
00me
[CS] 동시성 프로그래밍 vs 비동기 프로그래밍
상단으로

티스토리툴바