동시성 프로그래밍 (Concurrency) 프로그래밍 - 엘런강의

한개의 thread(복사기)에서 사용하는게 아니라 다른 쓰레드로 일을 나눠서 분산처리 하고싶다. → 비동기(Asynchronous)의 개념

비동기: 작업을 다른 쓰레드에서 하도록 시킨 후, 그 작업이 끝나길 기다리지 않고 다음일을 진행한다. 동기: 작업을 다른 쓰레드에서 하도록 시킨 후, 그 작업이 끝나길 기다렸다가 다음일을 진행한다.

직렬처리(Serial): (보통 메인에서)다른 한개의 쓰레드에서 순서가 중요한 작업을 처리할 때 사용 동시처리(Concurrent): (보통 메인에서)다른 여러개의 쓰레드에서 각자 독립적이지만 유사한 여러개의 작업(중요도나 작업의 성격등)을 처리할 때 사용

비동기와 동시처리란 말은 같은말인가? →정답은 아니오!! 비동기는 작업을 보내는 쓰레드에 관련된 개념 1번 쓰레드에서 2번쓰레드로 보낸 작업을 기다릴지 말지.. 동시처리는 메인쓰레드에서 다른 쓰레드로 작업을 보낼때 1번쓰레드가아닌 2,3,4번쓰레드가 한개냐 여러개냐~하는 개념

RunLoop : 앱이 실행되면 그 앱을 관리하는 무한 반복문이 생성되는 것 특정이벤트들(버튼을 누르거나 핀치 줌, 화면 가로로 돌리기)을 앱에 하나하나 던져줘서 메인런루프를 타고 해당하는 함수를 찾아서 해당 함수를 실행시키는 것.

Queue(대기열)

작업을 즉시 다른 쓰레드로 배치한다. 항상 선입선출(FIFO)

작업(Task)를 큐(Queue)로 보내는 방법

iOS프로그래밍에서는 대기열에 2가지종류가있다.

  1. DispatchQueue
  2. OperationQueue(자세히 몰라도 취업은 가능하다. 그만큼 Dispatch가 중요하고 Dispatch를 알면 이해하게됨) 직접 쓰레드를 생성시키진않는다.

병렬 vs 동시

병렬(Parallel): 물리적인 쓰레드에서 실제 동시에 일을 하는 개념

동시성(Concurrency): 메인 쓰레드가 아닌 다른 소프르웨어적인 쓰레드에서 동시에 일을 하는 개념


비동기, 동시 개념

동시성 프로그래밍의 비동기 처리(async) : 다른 쓰레드로 보내고 즉시 리턴을 시켜주는 것이 비동기처리, 일을 시작시키고 작업이 끝날때까지 기다리지 않는 개념!!