Concurrency(동시성)프로그래밍에 대해서4 (직렬(Serial)과 동시(Concurrent)의 차이)

2021. 11. 29. 23:46iOS/iOS

728x90
반응형
이 포스팅은 인프런의 동시성 프로그래밍 강의를 참고하여 제작하였습니다.

 

안녕하세요 bannavi입니다^ㅅ^

 

이번 시간에는 직렬과 동시의 차이에 대해 배워볼거에요!

바로 시작해보겠습니다.

 

 

 

 

직렬(Serial) vs 동시(Concurrent)

이게 어떤 것에 관련된 것이냐.. 하면 아래의 그림을 한번 봐주세요

우리는 앞선 포스팅들에서 큐를 두가지 배웠어요. 디스패치, 오퍼레이션 맞죵? (오퍼레이션 큐는 좀 더 뒤에 가서 배울거에용)

근데 디스패치큐는 또 세가지로 나눠집니다. main(글로벌), global, private(커스텀) 으로요.

이 세가지 종류들은 뒤에가서 더 자세히 배울거고요 이번 포스팅에서는 큐가 가진 특성에 대해서 배워볼거에요!

 

 

그 특성이 바로 뭐다?

개념도 아주 쉽습니다. 

 

 

 

먼저 Serial직렬큐는 Queue가 받아들인 작업을 하나의 스레드로만 보내는것입니다.

일의 순서가 중요한 작업을 처리할 때 사용합니다.

 

 

그럼 Concurrent큐는 뭘까요?

Concurrent큐Queue가 받아들인 작업을 여러 스레드로 보내서 작업 하는것을 의미합니다.

각자 독립적이지만 중요도나 작업의 성격 등 유사한 여러개의 작업을 처리할 때 사용합니다.

 

오잉 근데 유사한작업..? 이라고 하니까 잘 모르겠어요

혹시 첫 포스팅에서 살펴보았던 이 그림 기억 나시나요?

아래 그림처럼 셀 하나하나가 각자 독립되었지만 그림을 그리고 있는 유사한 작업이라는 거죠.

 

또 뭐가 있을까요?ㅎㅎ

 

요런 앱들이 좋은 예시가 될 수 있겠어요.

보면 collectionView, tableView에서 cell이 다 있죠?

cell 하나 하나에서 지금 하고 있는 작업들이 비슷해보이지 않나요?(이미지 다운로드)

심지어 이러한 작업들 자체가 동시에 일어나고 있어요.

 

당연히 이것들은 동시(Concurrent)큐를 이용해서 만드는것이라고 볼 수 있습니다.

 

 

오호.. 간단하네요

 

직렬(Serial)큐는 다른 한개의 스레드에서 처리!

동시(Concurrent)큐는 다른 여러개의 스레드에서 처리!

 

둘다 (보통 메인에서) 분산처리 시킨 작업을 처리한다는 점은 같습니다.

 

 

 

그럼 앞시간에서 배웠던 동기와 비동기/ 직렬과 동시에 대해서 다시 한번 살펴볼까요?

 

비동기는 작업을 다른 쓰레드에서 하도록 시킨 후, 안기다리고 다음일을 진행했었죠.

마치 무궁화꽃이처럼 스레드에 일감만 던져주고 나오는데 그게바로 비동기!!!였어요

 

 

동기는? 다른 쓰레드에서 작업을 하도록 시킨다음 그 작업이 끝날때~~~~~까지 기다렸다가! 다음일을 진행했었습니다.

 

 

직렬(Serial)큐는? 분산처리 시킨 작업을 다른 한개의 스레드에서 처리하는 큐

 

 

동시(Concurrent)큐는? 분산처리 시킨 작업을 다른 여러개의 스레드에서 처리하는 큐

 

 

 

그럼 비동기(Async)랑 동시(Concurrent)랑 같은 말인가요?

전혀 아닌거죠.

 

비동기는 일반적으로 메인스레드에서 작업을 다른 스레드로 분산처리시키고 그 작업이 끝나길 기다리지않고 다음 작업을 생성하죠.

작업을 보내는 시작점에서 작업을 기다릴지 말지에 대해 다룬것이 비동기적인 개념입니다.

 

 

동시는 대기열로 보내진 작업이 여러개의 스레드로 갈것인지 한개의 스레드로 갈것인지에 대해 정하는것이 시작이기 때문에

아예 기본전제부터가 비동기와 다르다고 할 수 있겠습니다.

 

그래서 당연히 다른 말이랍니다^ㅅ^

 

 

 

 

고생많으셨습니다. 다음 시간부터는 GCD에 대해서 아주 깊이 살펴볼거에요!

댓글은 제 힘이 되지만 한개도... 달리지 않네요...흑흑..

 

 

 

reference

728x90
반응형