iOS 동시성프로그래밍에 대해서

고라니·2023년 8월 19일
0

TIL

목록 보기
24/67

이전 글에서는 동시성프로그래밍과, 동기, 비동기, 병령 등 관련된 개념에 대해 다뤘다. 이번에는 iOS환경에서의 동시성 프로그래밍을 다루며, 개념을 정리하면서 헷갈렸던 부분에 대해 작성해본다.

iOS의 동시성프로그래밍

iOS의 동시성프로그래밍은 여러 작업을 동시에 관리하고 실행하여 앱의 성능과 반응성을 향상시키는 프로그래밍 방법이라고 할 수 있다.

iOS의 동시성프로그래밍이 왜 필요할까?

iOS에서 동시성 프로그래밍이 필요한 이유는 대부분 네트워크 작업과 같은 오래 걸리는 작업 때문이다. 이런 작업들이 메인 스레드에서 실행되면 앱의 반응성이 떨어질 수 있다. 따라서 동시성 프로그래밍을 통해 네트워크 작업과 같은 작업은 백그라운드 스레드에서 처리하여 앱의 반응성을 유지할 수 있다.

  • 효율성: 여러 개의 스레드를 활용하여 작업을 분산 처리하여 효율적으로 작업을 수행할 수 있다. 이는 앱의 성능과 최적화에 도움을 준다.

  • 사용성, 반응성: 사용자 경험을 향상기키기 위해서는 앱이 빠르게 반응해야 한다. 네트워크와 같은 느린 작업을 동시성 프로그래밍을 통해 처리하면 앱의 반응성을 유지할 수 있다.

  • 다중 코어 활용: 현대의 iOS 기기들은 다중 코어 프로세서를 가지고 있다. 동시성프로그래밍을 통해 다중 코어를 효과적으로 활용하여 작업을 병렬로 처리할 수 있다.

iOS의 동시성프로그래밍을 위한 기술

  • Grand Central Dispatch (GCD): iOS에서 제공하는 동시성 및 병렬성을 지원하는 프레임워크이다. 간편하게 다양한 작업을 스레드로 분배하여 처리할 수 있다.
  • Operation Queue: GCD와 유사한 방식으로 동작하지만, 더 추상화된 고수준의 작업 관리를 제공한다.
  • Async/Await: Async/Await Swift 5.5부터 도입된 문법으로, 비동기 작업을 보다 구조적으로 다룰 수 있다.

이러한 기술들을 활용하여 동시성 프로그래밍을 구현할 수 있다.


동시성과 병렬성

동시성과 병렬성은 비슷한 개념이지만 다른 개념이다. 이런 부분이 제일 헷갈렸던 부분이다.

  • 동시성(Councurrency)
    여러 작업을 번갈아가며 실행하여 작업들이 동시에 처리되는 것처럼 보이게 한다. 순서와 우선순위를 조절하여 효율적으로 작업을 처리하고 시스템의 반응성을 유지한다.
  • 병렬성(Parallelism)
    여러 작업을 실제로 동시에 병렬적으로 실행하여 처리 속도를 향상시킨다.

헷갈리는 부분과 고민

  • 동시성은 실제로 동시에 실행되지 않고 동시에 실행되는 것처럼 보인다?
  • 왜 동시성프로그래밍이 필요한 이유에 "다중 코어 활용"이 왜 있을까?
  • "다중 코어 활용"은 병렬성에 해당하지 않나?
  • 동시성프로그램을 통해 성능이 향상된다고 하였고, 작업 속도면에서도 이점이 있다고 햇는데
    이미지를 보면 작업1과 작업2는 동시에 실행되지 않기 때문에 속도면에서 이점이 있다고 보기 힘들어 보인다?

내가 헷갈린 부분은 동시성이 실제로는 동시에 작동하지 않고 번갈아 가며 작동한다는 부분이다. 하지만 동시성을 사용하면 좋은 점을 보면 병렬성의 이점을 포함하고 있다.

동시성과 병렬성 비교 결론

정확한 내용이 아니라는점을 주으해주시기 바랍니다 (만약 잘 알고게신분이 게시면 알려주세요 ㅠ)

동시성은 원래 싱글 코어 시스템에서 여러 작업을 번갈아가며 실행하여 반응성과 사용성을 유지하는 것을 의미했다. 하지만 현대의 다중 코어 시스템에서는 동시성 기술이 병렬성까지 포함하게 되었다.
특히 멀티코어 시스템에서 동시성 기술은 작업들을 적절하게 분산하여 여러 코어에서 실행하고, 각 코어의 스레드에 작업을 할당하여 병렬성을 활용한다. 따라서 동시성은 작업들을 효율적으로 관리하고 병렬성을 기반으로 작업을 싱행하는 개념으로 이해할 수 있다.


동시성의 주의사항

  • 경쟁 상태(Race Condition): 여러 스레드가 동시에 접근하고 수정하는 공유 데이터에 대해 경쟁 상태가 발생하지 않도록 해야함. 이를 위해 lock을 사용하거나 데이터 접근을 제한하는 방법을 사용해야 함

  • 데드락(Deadlock): 교착 상태라고도 부르며 여러 스레드가 서로의 자원을 기다리면서 멈춰있는 상태를 말한다. 이 현상을 피하기 위해 순서를 정하는 등의 방법을 사용해야 한다.

  • UI 업데이트: 메인 스레드에서만 UI업데이트가 가능하므로 백그라운드에서 실행되는 작업이 UI를 업데이트를 시도하지 않게 해야한다.

  • UI동기화: 여러 스레드에서 UI를 변경하거나 접근할 때 동기화 해야 한다. 동기화 하지 않으면 크래시가 발생할 수 있다.

  • 데이터 무결성: 여러 스레드가 데이터를 동시에 수정하거나 접근할 때 데이터의 무결성을 보장해야 한다.

  • 성능 저하 고려: 동시성은 성능 향상을 도모하지만 과도한 스레드 생성이나 작업 분배는 오히려 성능을 저하시킨다. 적절한 스레드 관리가 필요하다.

장점이 많고 꼭 필요한 기능인 만큼 주의해야할 부분도 많다. 직접 활용해보면서 자세히 알아보겠다.


마치면서

동시성 프로그래밍은 iOS 앱의 성능과 사용자 경험을 향상시키기 위해 필요한 중요한 개념이다. 앞으로 GCD와 Operation Queue, Async/Await와 같은 기술을 화용하여 실제로 어떻게 동시성을 구현하고 사용하는지에 대해 자세히 알아보도록 하겠다.

profile
🍎 무럭무럭

0개의 댓글