-
[개발자 문서읽기] Concurreny Proramming Guide - 1iOS 2020. 8. 16. 16:27728x90
공부하며 번역한 내용입니다.
오역과 의역이 있을 수 있습니다. 정확한 내용은 원문을 참고해주세요 :)도입
Concurrency 란 여러가지 일이 동시에 일어나는 개념이다. 멀티코어 CPU의 확산과 각 프로세스에서 많은 수의 코어가 실현됨에 따라 소프트웨어 개발자는 이러한 이점을 이용할 새로운 방법들이 필요해졌다. 비록 OS X 나 iOS 같은 OS가 다양한 프로그램을 병렬적으로 처리할 수 있더라도 대부분의 프로그램들은 백그라운드에서 실행되고 프로세스 타임을 요구하는 동작을 지속적으로 수행한다. 사용자의 관심을 끌고 컴퓨터가 바쁘게 움직이는게 최근 포어그라운드 application 이다. 만약 하나의 어플리케이션이 많은 작업을 유용한 코어 용량의 일부만을 가지고 처리한다면 나머지 프로세싱 자원이 낭비된다.
과거에는 어플리케이션에 동시성을 도입하려면 하나 혹은 그 이상의 스레드를 만들어야 했다. 안타깝게도 스레드를 사용하는 코드는 제대로 작성하기 어렵다. 스레드는 많은 로우 레벨의 작업을 요하는 도구다. 어플리케이션에서 최적의 스레드의 수가 시스템과 내부적인 하드웨어에 따라 유동적으로 변할 수 있는 점을 생각해보면, 적당한 스레딩을 구축하는 건 불가능하지는 않더라도 매우 어려운 일이다. 게다가, 일반적으로 스레드와 함께하는 동시성 메커니즘(synchronization mechanisms)은 성능이 더 향상된다는 보장도 없이 소프트웨어 디자인에 복잡함과 위험성까지 더한다.
OS X 와 iOS 모두 concurrent 작업들을 수행하는 데에 전통적으로 스레드 기반 시스템과 어플리케이션에 만들어진 것 보다 더 많은 비동기적 접근을 적용하고 있다. 어플리케이션은 특정 작업들을 정의만 하고 스레드에 직접 생성하는 건 시스템에 맡기는 게 필요하다. 시스템이 스레드들을 관리하게 함으로써 어플리케이션은 스레드 그 자체로는 할 수 없는 확장성을 얻을 수 있다. 또한 어플리케이션 개발자는 더 심플하고 효율적인 프로그래밍 모델을 얻을 수 있다.
이 문서는 어플리케이션에서 concurrency 기술을 사용할 수 있도록 technique 과 technologies 을 기술한다. 이 문서에서 기술된 technologies 는 OS X 와 iOS 에서 모두 사용될 수 있다.
내가 하는 간단 요약.
스레드는 스레드끼리 공유 자원을 갖기 때문에 개발자 입장에서 신경써야 할 부분이 많아집니다. 효율적으로 코드를 짜기 어렵고 버그가 생길 여지도 많죠. 또 스레드의 개수를 늘린다고 해서 꼭 성능이 좋다진다고 보장할 수도 없습니다. (스레드의 개수와 성능이 꼭 정비례하지 않습니다) 또 하드웨어마다, 시스템마다 최적의 스레드 개수가 다릅니다.
따라서 애플은 스레드를 관리하는 이 로우한 작업들을 시스템에게 맡깁니다. 이렇게 하면 개발자는 어떻게 동작할지에만 더 집중하면서 효율적이고 편하게 프로그래밍 할 수 있게 됩니다. 시스템이나, 하드웨어적인 부분에 구애받지 않기 때문에 이런 부분들이 바뀌더라도 고민하지 않아도 되고, 확장성도 가질 수 있게됩니다.
이러한 기반을 토대로 어떻게 프로그래밍 할 수 있는지 그 기술적인 부분과 기법들에 대해서 설명하는 문서가 될 것 같아요.
A Note About Terminology
concurrency 에 대한 설명에 들어가기에 앞서, 혼란을 막기 위해 관련 기술에 대한 정의가 필요합니다. UNIX 시스템 또는 과거 OS X 기술에 친숙한 개발자라면 "task", "process", "thread" 같은 용어가 다소 다르게 사용되는 걸 발견할 수 있습니다. 이 용어들은 이 문서에서 다음과 같은 방식을 따릅니다.
- thread 는 코드에 대한 별도의 실행 경로를 가리키는 데 사용됩니다. OS X에서 스레드의 내부 구현은 POSIX thread API를 기반으로 합니다.
- process 는 멀티 스레드를 포함할 수 있는 실행 가능한 실행 파일을 가리키는 데 사용됩니다.
- task 는 실행될 work에 대한 추상적인 개념으로 사용됩니다.
See Also
또한 이 문서는 어플리케이션에서 concurreny 기법이 어떻게 사용되는지에 초점을 맞추고 있습니다. threads 의 사용에 대한 내용은 Threading Programming Guide 를 참고하세요.
감사합니다!
'iOS' 카테고리의 다른 글
[개발자 문석읽기] UIImage (0) 2020.10.10 [개발자 문서읽기] About App Development with UIKit (0) 2020.09.16 DispatchQueue (0) 2020.08.11 기기 회전 방향, interfaceOrientation 확인하기 in iOS 13.0 (0) 2020.07.20 CG, Core Graphics (0) 2020.07.12