ios 에서 동시성 프로그래밍

김지훈·2022년 4월 22일
0

우선, 프로세스란 운영체제로부터 자원을 할당받은 작업의 단위이다. 예를 들어 메모리에 적재되어 실행되고 있는 프로그램을 프로세스라고 한다. 스레드는 이러한 프로세스의 단위이다. 하나의 프로세스는 하나 이상의 스레드를 가지고 이 스레드는 또 다시 코드 단위로 분할이 가능하다. iOS개발에서 이전에는 개발자가 직접 스레드를 생성하고 사용했기 때문에 프로세스의 작업단위가 스레드였다. 하지만 cpu의 코어 갯수마다 스레드 갯수의 효율성이 달라지기 때문에 이는 cpu의 상황을 알고있는 운영체제가 스레드를 관리하도록 바뀌었다. 다만, iOS개발자가 해야할 일은 클로저(코드) 단위로 특정 Queue에 작업을 삽입해야하는 것이다. 이러한 queue에 실행되어야할 코드를 삽입하면 GCD API 같은 녀석이 이 Queue에 대한 작업에 맞는 스레드를 생성하거나 기존 스레드에 삽입해서 코드를 동작할 수 있게 해준다. 스레드 생성과 삭제를 자동으로 관리해주는 것이다. 그래서 스레드 갯수 또한 개발자가 직접 관리하지 않아도 된다. GCD에서는 Main Queue, global Queue두가지를 활용할 수 있다. main Queue는 main thread에 작업이 할당 되는 특별한 queue이고 global queue는 기타 스레드에 작업이 할당되는 큐이다. 일반적으로 main queue는 serial queue이고, global queue는 동시 큐이다.
메인큐(직렬큐)에 작업 할당 -> 작업이 FIFO로 특정 스레드에 할당
글로벌큐(동시큐)에 작업 할당 -> 작업이 우선순위 순서로 여러 스레드에 할당??

  • 2021년 wwdc에서 async/await방식이 소개되었다. 라인에서 테스트코드를 돌려보았을 때 기존 GCD방식보다 async/await 방식이 일부 상황에서 성능이 10배 이상 좋은걸 확인할 수 있었다.

코어가 여러개일 경우 메인쓰레드는 메인 코어에 줄을 서고 글로벌큐는 다른 코어들에 줄을 설수 있다.. ? 뭐지 ??

0개의 댓글