Swift 병렬 프로그래밍 기초

2774 단어 iOSSwiftObjective-C
Apple 공식 문서가 단단히 어려우므로, 그 확실히.



1. 소개



병렬 프로그래밍이란?



복수의 실행 처리를 CPU에 대해서 병렬적으로 행하게 하는 구현. 덧붙여서, 병렬의 대의어는 직렬.

효능


  • 구현 코드가 간단합니다.
  • 처리를 분담하여 실행 속도가 향상.
  • 뷰와 다른 처리를 나누는 것으로, 지연이나 덫이 없는 인터랙티브인 UI에.

  • 용어



  • CPU
  • 중앙 연산 처리 장치. PC나 스마트폰을 구성하는 부품 가운데, 처리를 점점 심판해 가는 가장 중요한 부품.


  • 메모리
  • 주 기억 장치. PC나 스마트폰을 구성하는 부품 중, 처리에 사용하는 데이터를 일시적으로 유지하기 위한 부품. 데이터를 영구적으로 유지하는 HDD나 플래시 메모리 등의 보조 기억 장치와는 별도.


  • 프로세스
  • 어플리케이션이나 프로그램 마다 확보되는 실행 인스턴스. 전용으로 가상 메모리 공간과 시스템 리소스가 할당되며 하나 이상의 스레드를 포함합니다.


  • 스레드
  • 프로세스가 수행하는 프로세스를 저장하는 플로우. 독자적인 스택 공간을 가진다.


  • 작업
  • 실행 처리를 나타내는 추상 단위.



  • thread에 태스크를 추가하거나, 복수 thread의 순서를 정돈하는 등의 thread 관리를 OS측에 맡기는 대신에 생긴 개념. 적절한 큐에 태스크를 추가하는 것만으로, 자동적으로 적절한 프로세스의 적절한 thread에 태스크가 추가되어 실행된다.
  • GCD에서는 디스패치 큐, Operation에서는 오퍼레이션 큐를 사용한다.


  • 2. 종류



    ①Thread/NSLock



    스레드 관리를 직접 수행하는 메커니즘. 보다 안전하고 효율적으로 병렬 프로그래밍을 하기 위한 구조로서 ②③이 있기 때문에 적극적으로 사용할 이유는 없지만, 쓰레드를 직접 취급하는 만큼 ②③에 비해 실시간 처리의 타임 러그가 적은 이점이 있다.

    ②GCD(Grand Central Dispatch)



    병렬 프로그래밍의 메커니즘 중 하나. 쓰레드의 관리를 OS 측에서 은폐하는 대신에 큐라고 하는 개념을 이용해, 보다 안전하고 효율적으로 병렬 프로그래밍을 실현할 수 있게 되어 있다. ( 기사 썼어! )

    ③Operation



    병렬 프로그래밍의 메커니즘 중 하나. ②를 랩핑한 구조로, 큐나 태스크의 상황이 추적하기 쉬워지고 있다.

    3. 구분


  • 기본적으로 Operation에서 좋지만, 난점도 있다.
  • 큐나 태스크를 인스턴스로서 취급하기 위해(때문에), 다른 클래스나 메소드가 얽힌 병렬 프로그래밍이 되면 단숨에 코드가 복잡해질 가능성이 있습니다.
  • 통상의 기술에서도 GCD가 간단하게 되기 쉽다.
  • 퍼포먼스적으로도 GCD에 분이 있습니다.

  • 상기 난점과의 합의에 따라서는, GCD를 사용하는 것이 좋다.
  • 기타 Operation이나 GCD로 해결할 수 없는 특수한 상황에 대해서는, Thread등의 사용을 검토.

  • 4. 참고


  • AppleDocumentation: Dispatch
  • Apple: Concurrent Programming With GCD in Swift 3
  • AppleDocumentation: Foundation>TaskManagement>Operation
  • 오기하라 츠요시 「상해 Objective-C 2.0 제3판」(←현재 Swift판에는 기술 없음.)
  • 좋은 웹페이지 즐겨찾기