Concurrency Programming Guide (1) - 소개
동시성은 동시에 일어나는 여러 가지 일에 대한 개념이다. 멀티코어 CPU의 확산과 각 프로세스의 코어 수만 증거할 것이라는 인식으로 인해 소프트웨어 개발자들은 이를 활용할 새로운 방법이 필요하다. OS X 및 iOS와 같은 운영 체제는 여러 프로그램을 병렬(parallel)로 실행할 수 있지만 이러한 프로그램의 대부분은 백그라운드에서 실행되며 프로세서를 지속적으로 사용하지 않는 작업을 수행한다. 현재 포어그라운드 애플리케이션이란 사용자의 주의를 끌며 컴퓨터를 계속 작동시킨다. 애플리케이션이 해야 할 일은 많지만 사용 가능한 코어의 일부만 점유하고 있는 경우 이러한 추가 처리 리소스는 낭비 된다.
과거에는 애플리케이션에 동시성을 적용하려면 하나 이상의 추가 스레드를 만들어야 했다. 불행히도, 스레드 코드를 작성하는 것은 어렵다. 스레드는 수동으로 관리해야 하는 저 수준 도구이기 때문이다. 애플리케이션에 대한 최적의 스레드 수가 현재 시스템 부하와 기본 하드웨어에 따라 동적으로 변경 될 수 있다는 점을 감안할 때 올바른 스레딩 솔루션을 구현하는 것은 불가능하지는 않지만 매우 어렵다. 또한 일반적으로 스레드와 함께 사용되는 동기화 메커니즘은 성능 향상을 보장하지 않고 소프트웨어 설계에 복잡성과 위험을 가중시킨다.
OS X와 iOS 모두 기존의 스레드 기반 시스템과 애플리케이션에서보다 동시 작업 실행에 더 비동기적인 접근 방식을 채택한다. 애플리케이션은 스레드를 직접 생성하는 대신 특정 작업만 정의한 다음 시스템이 이를 수행하도록 하면 된다. 시스템에서 스레드를 관리하도록 허용하면 원시 스레드에서 불가능한 수준의 확장성을 얻을 수 있다. 또한 애플리케이션 개발자는 간단하고 효율적인 프로그래밍 모델을 얻을 수 있다.
이 문서에서는 애플리케이션에서 동시성을 구현하기 위해 사용해야 하는 기술에 대해 설명한다. 이 문서에 설명된 기술은 OS X 및 iOS에서 모두 사용할 수 있다.
문서의 구성
이 문서에는 다음 챕터들이 포함되어 있다.
- 동시성과 애플리케이션 설계는 비동기 애플리케이션 설계의 기본사항과 사용자 정의 테스크를 비동기적으로 수행하기 위한 기술을 소개한다.
- Operation Queue는 Objective-C 객체를 사용하여 테스크를 캡슐화하고 수행하는 방법을 보여준다.
- Dispatch Queue는 C 기반 애플리케이션에서 동시에 테스크를 실행하는 방법을 보여준다.
- Dispatch Source는 시스템 이벤트를 비동기적으로 처리하는 방법을 보여준다.
- Migrating Away from Threads는 새로운 기술을 사용하기 위해 기존 스레드 기반 코드를 마이그레이션하기 위한 팁과 기술을 제공한다.
용어에 대한 참고 사항
동시성에 대한 논의를 시작하기 전에 혼동을 방지하기 위해 관련 용어를 정의해야 한다. UNIX 시스템 또는 이전 OS X 기술에 더 익숙한 개발자는 이 문서에서 "테스크", "프로세스", "스레드"라는 용어가 다르게 사용된다는 것을 알 수 있다. 이 문서에서는 이러한 용어를 다음과 같은 방식으로 사용한다.
- 스레드라는 용어는 코드에 대한 별도의 실행 경로를 나타내는 데 사용된다. OS X의 스레드에 대한 기본 구현은 POSIX 스레드 API를 기반으로 한다.
- 프로세스라는 용어는 여러 스레드를 포함할 수 있는 실행중인 실행 파일을 가르키는 데 사용된다.
- 테스크라는 용어는 수행되어야 할 작업의 추상적 개념을 가르키는 데 사용된다.
참고 항목
이 문서는 애플리케이션에서 동시성을 구현하기 위해 선호하는 기술에 초점을 맞추고 있으며 스레드 사용에 대해서는 다루지 않는다. 스레드 및 기타 스레드 관련 기술 사용에 대한 자세한 내용은 Threading Programming Guide를 참조하라.
[원문]
Introduction
Introduction Concurrency is the notion of multiple things happening at the same time. With the proliferation of multicore CPUs and the realization that the number of cores in each processor will only increase, software developers need new ways to take adva
developer.apple.com