Mac에서 음악을 듣는 동시에, 인터넷 작업을 할 수 있다.
iOS App에서 버튼을 터치해서 다음 화면으로 넘어갈 수 있는 동시에, 이미지를 다운로드 할 수 있다.
여기서 적용되는 개념이 바로 Concurrency(동시성)이다.
iOS 개발을 할 때, 많이 들었던 것.
네트워크 통신 이후, UI Update는 반드시 Main Thread에서 해야 합니다.
프로젝트에서 질문,
서버에서 데이터를 가져오고 화면에 뿌려줄 때
멀티스레드 프로그래밍을 이용했을 것 같은데, 어떻게 이용하셨나요?
Computer Scienece 질문,
보통 저희가 음악을 들으면서 문서를 작성하면서 영화도 보면서 동시에 실행을 하잖아요.
원리가 무엇일까요?
개념을 정리해보자.
Multi-Threading을 중심으로 알아보자.
Concurrency는 여러 개의 프로세스/스레드를 논리적으로 동시에 실행하는 것을 의미한다. (반드시 동시간대는 아님.)
Concurrency를 구현하는 방법
Single Core Processor | Multi Core Processor |
Context Switching (Time-Slicing as a form of Virtual Parallelism) |
Parallelism |
Multi Core Processor는 스레드를 여러 개의 Processor에 적절히 분배해야 자원을 효율적으로 활용할 수 있는데,
iOS에서는 이를 Dispatch (GCD:Grand Central Dispatch)의 형태로 제공한다.
프로그래머가 직접 관여하는게 아니라, 이를 시스템적으로 처리해주는 API가 제공되는 셈이다.
Dispatch
Execute code concurrently on multicore hardware by submitting work to dispatch queues managed by the system.
Overview
Dispatch, also known as Grand Central Dispatch (GCD), contains language features, runtime libraries, and system enhancements that provide systemic, comprehensive improvements to the support for concurrent code execution on multicore hardware in macOS, iOS, watchOS, and tvOS.
The BSD subsystem, Core Foundation, and Cocoa APIs have all been extended to use these enhancements to help both the system and your application to run faster, more efficiently, and with improved responsiveness. Consider how difficult it is for a single application to use multiple cores effectively, let alone to do it on different computers with different numbers of computing cores or in an environment with multiple applications competing for those cores. GCD, operating at the system level, can better accommodate the needs of all running applications, matching them to the available system resources in a balanced fashion.
DispatchQueue
An object that manages the execution of tasks serially or concurrently on your app's main thread or on a background thread.
참고로, Main Thread와 DispatchQueue의 Main Queue는 상이한 개념인데
Main Queue의 작업들은 반드시 Main Thread에서 돌지만,
Main Thread에 도는 작업들이 Main Queue에서만 오는 것은 아니라고 한다.
참고: Main thread and main queue: what’s the difference?