TIL55 ✨

YaR Lab·2023년 7월 7일
0

TIL✨

목록 보기
43/135
post-thumbnail

🗓️23.07.07

https://gyuios.tistory.com/85

https://zeddios.medium.com/coordinator-pattern-bf4a1bc46930

병렬 프로그래밍

실제로 여러 작업을 동시에 실행
여러 개의 CPU(코어)가 하나의 작업(Task)을 분담 할 수 도 있고 여러 개의 작업을 여러 개의 코어가 분담할 수도 있음
여러 개의 프로세서나 코어가 있는 컴퓨터 시스템에서 작업을 나눠서 병렬로 실행함으로써 처리 속도를 빠르게 함
실제로 여러 작업을 동시에 실행하여 처리 속도를 높임

동시성 프로그래밍

여러 작업을 번갈아 가면서 동시에 처리하는 것처럼 실행하는 것처럼 보이게 함
여러 작업(Task)을 동시에 처리하는것처럼 보이게함
다중 스레드를 활용
반대되는 개념은 직렬 프로그래밍(단 하나의 스레드에서만 작업)

동기(Synchronous)

동기 프로그래밍은 작업이 끝나기를 기다리는 것
실행 종료 시점을 알 수 있는가 yes~

비동기(Asynchronous)

작업이 끝나기를 기다리지 않고, 다음 코드 블록을 바로 실행
실행 종료 시점을 알 수 있는가 no~

Serial 환경

단일 스레드

Concurrent 환경

다중 스레드

메인 스레드(Main Thread)

GCD(Grand Central Dispatch) = Dispatch 프레임워크

Operation의 근간이 되는 API
코드로서 동기/비동기 처리만 해준다면 시스템이 알아서 스레드를 관리해주는 방식
멀티 코어 환경과 멀티 스레드 환경에서 최적화된 프로그래밍

Dispatch Queue

  • 대기열에 보내다
  • GCD를 사용하기 위한 대기열
  • FIFO(First In, First Out)
  • 필수요소1: Serial/Concurren
  • 필수요소2: sync/async
  • DispatchQueue를 초기화할 때 attributes를 따로 .concurrent로 설정하지 않으면 그 기본 값은 Serial이 됨
  • main 프로퍼티 - Serial 큐, 늘 메모리에 올라와 있으며 또 전역적으로 사용 가능한 큐
  • global() 메서드 - Concurrent 큐, 메모리에 올라왔다가, 작업이 끝나고 나면 메모리에서 제거
// 동기, sync
DispatchQueue.main.sync {}
DispatchQueue.global().sync {}

// 비동기, async
DispatchQueue.main.async {}
DispatchQueue.global().async {}

main Thread

앱의 생명주기와 같은 생명주기를 가지는, 앱이 실행되는 동안에는 늘 메모리에 올라와있는 기본 스레드
메인 스레드에서부터 필요한 만큼의 스레드가 파생됨
전역적으로 사용이 가능
global 스레드들과는 다르게 Run Loop가 자동으로 설정되고 실행됨
메인 스레드에서 동작하는 Run Loop를 Main Run Loop라고 함
UI 작업은 메인 스레드에서만 작업할 수 있음
main.sync를 직접적으로 호출하면 deadlock(교착상태)에 빠지게 됩
Block-wait 기다림

Operation

async/await

CommendLineTool vs Playgroud

0개의 댓글