본문 바로가기
Dev/Swift 내 정리

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

by Mintta 2023. 3. 16.

비동기(async) ≠ 동시성(concurrency)

다시 한번 강조 !!


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

비동기와 동시성 이름만 두고보면 정말 뭐가 다른지 너무 헷갈려서 정리를 한번 하고가고자 합니다. 저와 같았던 분들도 이 글을 통해서 어느정도 정리가 되셨으면 하네요

간단히 말하면 비동기는 작업 하나에 대한 처리 방법이고, 동시성은 여러 작업들에 대한 처리 방법입니다.

비동기는 작업을 Dispatch Queue에 보낸 후에 바로 신경을 끄고 다음 일을 하는 것을 말하고 동시성은 Queue에 있는 작업들을 여러개의 스레드에서 처리하는 것을 말합니다.

이렇게 끝내면 아쉬우니까 조금 더 정리해볼게요

야곰🐻님께서는 이것들에 대해서 이렇게 정리해서 말씀해주셨습니다.

비동기 (async)

프로그램의 흐름과 이벤트의 발생 및 처리를 독립적으로 수행하는 방법

동시성 (Concurrency)

여러 작업이 논리적인 관점에서 동시에 수행되는 것. 싱글 코어 또는 멀티 코어에서 멀티 스레딩을 하기 위해 적용

병렬성 (Parallel)

여러 작업이 물리적인 관점에서 동시에 수행되는 것

저는 처음에 이게 한번에 와닿지 않았습니다…저같은 분들을 위해 제가 이해한 바 대로 조금 설명을 보태보겠습니다.

+++

비동기(async)는 맨 앞에 말했듯이 작업을 큐에 넣고 신경을 끈다했죠?

조금 더 풀어서 이야기하면 신경을 끄는 주체, 즉 앱의 흐름을 관장하는 메인 스레드는 작업을 큐에 넣고 신경을 끈채로 다음 작업을 이어나갑니다. 프로그램의 흐름은 메인 스레드가 일을 처리하는 흐름을 말하는 거와 같겠죠.

이 때 프로그램 흐름은 강물 마냥 흘러가고 이벤트의 발생 및 처리는 다른 스레드에서 이를 처리합니다. 그렇다면 프로그램의 흐름과 이벤트의 발생 및 처리는 독립적이라고 할 수 있겠죠?

동시성(concurrency)에는 논리적인 관점이라는 말이 키워드입니다. 논리적이라는 말은 물리적이지 않다는 이야기죠?

즉, 여러 스레드를 사용하여 작업을 분할하고 context switching을 통해 여러 프로그램이 동시에 실행되게끔(논리적으로) 보이게 한다고 이해했습니다.

“싱글 코어 또는 멀티 코어에서 멀티 스레딩을 하기 위해 적용”이란 말이 이 말의 뒷받침이 된다고 생각합니다.

시스템프로그래밍을 수강했을 적에 교수님의 말을 빌리자면…

프로그램이 실행되는 어느 순간에 단면을 딱 잘랐을 때 !! 하나의 프로그램이 실행중인 것을 말합니다.

병렬성(Parallel)물리적인 관점에서의 동시 수행입니다.

CPU가 2개여서 각 각의 CPU가 서로 다른 프로그램을 수행중인 상황이 딱 이를 설명해줍니다.

다시한번 교수님의 말을 빌리자면…

병렬성은 프로그램의 실행 흐름 중 어느 순간 단면을 딱 ! 잘랐을 때 두 개의 프로그램(두 개의 프로그램이라면)이 모두 실행중인 것을 말합니다.

헷갈리는 두가지 개념과 추가적으로 병렬성에 대해 간단히 알아보았습니다.

맨날 헷갈려하는 저를 위해 글을 남깁니다 이제는 저도 비동기와 동시성은 같다라는 말을 들으면 발끈할 수 있을 것 같네요

ref


  • 프리온보딩 3월 야곰님의 강의

Uploaded by N2T

댓글