iOS에서는 멀티쓰레드를 지원해주는가?

|

개인공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있습니다.
참고한 블로그


들어가기에 앞서….

파이썬만 공부해봤던 나에게는(파이썬 멀티쓰레드 일반적으로는 지원하지않음) 이 개념이 조금 생소하지만, 일단 결과적으로 iOS에서는 멀티쓰레드를 지원한다!

프로세스(process): 실행중인 프로그램을 의미한다. 프로그램과 프로세스의 차이는 알고 있어야한다.
실행중이라는 의미는 말 그래도 사용자가 작성한 프로그램이 운영체제에 의해 메모리를 할당받았다는 것이고, 이러한 프로세스는 프로그램에 사용되는 메모리와 데이터등의 자원 그리고 스레드로 구성된다.

쓰레드(thread): 프로세스 내에서 실제로 작업이 수행되는 주체를 의미한다. 모든 프로세스는 한개 이상의 스레드가 존재해 작업을 수행한다.
두개 이상의 쓰레드를 가지는 프로세스를 멀티쓰레드 프로세스라고 한다.(multi-thread process)

멀티쓰레딩: 여러개의 쓰레드가 동시에 진행되는 것을 의미한다. 하나의 프로세스에 여러개의 쓰레드가 존재하고 이 스레드들이 프로세스의 자원을 공유하되 실행은 독립적으로 이루어지는 구조를 갖는다.

  • 장점
    • 메모리 공간과 시스템 자원 소모가 줄어든다.
    • 프로세스간 통신방법보다 간단하다 » 별도의 자원공간이 아닌 전역변수의 공간 또는 동적으로 할당된 공간(heap영역)을 이용해 데이터를 주고받음
  • 단점
    • 서로다른 쓰레드가 데이터와 heap영역을 공유하기때문에 한 쓰레드가 다른 쓰레드에서 사용중인 변수나 자료구조에 접근해 엉뚱한 값을 읽어올 수 있다.
    • 병목현상(과도한 lock)이 발생하여 성능이 저하될 가능성이 있다.

iOS에서는 멀티쓰레드를 지원한다!

그러나 멀티쓰레드 프로그래밍을 할 경우 고려해야하는 상황이 있다.

  1. UI업데이트 관한 작업들은 메인쓰레드에서 구현해야 한다.
  2. 쓰레드에 안전하지 않은(Thread-unsafe) 변수는 서로 다른 쓰레드에서 동시 접근하면 위험하기에 해당 작업을 반드시 신경써야한다.