IOS application/Networking

3. Concurrency (동시성)

개발자킹콩 2021. 4. 14. 18:07

Concurrency (동시성)

한번에 여러개 수행!!

 

App이 한번에 여러가지 일을 수행해야하는데 어떤 일을 하는지 살펴보자

 

작업번호

  1. 사용자 인터랙션(User Interaction 상호작용) 처리
  2. 네트워킹
  3. 백그라운드에서 파일 다운로드
  4. 파일 저장하고 읽기

 

네트워킹으로 인해 사용자 인터랙션을 못하거나 다른 것이 동작하지 않는다면 앱은 느려지고 아무도 사용하지 않게 될 것이다. 그렇기에 Concurrency는 반드시 필요한 작업이다. 

컴퓨터 공학에서는 이러한 작업을 Thread 라고 한다.

 

우리의 폰, 컴퓨터 입장에서는 Thread 1, 2, 3, 4 모두가 동시에 처리 되어야 한다는 것이다.

그렇기에 context switching을 통해 왔다리 갔다리 하면서 Thread를 동작시킨다.

너무 빨라서 동시에 하는 것 처럼 보이는 것이다.

컴퓨터에서는 여러 작업을 잘 쪼개서 동시에 여러개를 수행하는 효과를 보고 있다.

 

 

 


 

 

 

더 쉽게 동시성을 이해해보자

 

내가 배달기업을 차렸고 나혼자있는 1인 기업이다.

 

--

 

초기에는 숙련도가 낮아 배달 완료 전에는 전화를 받지 않았다.

 

이렇게 되면 사용자가 점점 줄어들 것이다.

그래서 주문은 언제든지 받자!! 라고 생각을 한 것이다.(동시성)

—> 이를 위해서 해야할 일은 하나의 큰 작업을 여러가지 Task로 나누어서 우선순위를 정해야한다.

 

일단 주문이 들어와야 일을 하기에 주문전화를 받는 것을 가장 큰 우선순위를 갖도록 한다.

주문 전화가 오면 잠시 하던일을 보류하고 전화부터 받는다.

 

 

이렇게 되서 노는 시간이 없이 바쁘게 일을 할 수 있게 된 것이다.

즉 동시성을 갖춘 회사가 된것이고, 전화 주문에 대한 동시성을 갖게 된 것이다.

 

 

 

 


 

 

 

 

 

 

 

 

이를 Thread로 살펴보면 다음과 같고 이를 주문 상황이라고 생각하면 아래와 같다.

 

 

 

이를 앱에 적용해보면 다음과 같다.

 

여러 Thread가 존재하고 우선순위를 정해서 빠르게 context switching를 통해 동시성을 적용하게 되는 것이다. 

 

 

 

 

 


 

 

 

 

작업번호

  1. 사용자 인터랙션(User Interaction 상호작용) 처리
  2. 네트워킹
  3. 백그라운드에서 파일 다운로드
  4. 파일 저장하고 읽기

 

 

이전에 정해두었던 작업1: 사용자 상호작용 처리는 Main Thread에서 처리하도록 되어있다.

Main Thread는 사용자 인터렉션을 처리하면서 UI표시하는 작업을 하고 있다.

복잡한 계산이나 네트워크 같은 작업은 Main Thread가 아닌 다른 Thread를 통해서 처리해야 앱의 반응성을 빠르게 가져갈 수 있다. 그래서 우리는 의도적으로 UI관련 혹은 사용자 인터렉션 관련 일들은 Main Thread에서 처리하고 나머지 일들은 다른 Thread를 이용하도록 코드를 작성해줘야한다. 

 

 

 

우리는 동시성의 이점과 동시성이 없을때의 단점을 알아보았다!!