[iOS] Dispatch Queue -01

Sangwon Shin·2021년 12월 3일
0

iOS

목록 보기
1/9

교육과정중에 이해되지 않았던 개념들을 차근차근 학습하면서 정리해볼 예정입니다.


<공부하면서 참고한 사이트들>

처음 해당 개념을 접했을 때

Serial/Concurrent : 순차적으로 일을 처리? 동시에 처리?
Sync/Async : 한번에 하나의 작업만 실행? 한번에 여러작업 진행?

위와 같은 맥락으로 이해하고 어라? 그럼 Serial == Sync 아닌가? 한번에 하나의 작업만 실행하니까 당연히 순차적인게 아닐까?

그럼 Serial Queue 에서 Async 작업은 무슨 의미가 있는거지?

동일한 쓰레드 내에서도 Async 로 추가한 작업은 동시에 처리될 수 있는건가?

하는 의문들 때문에 개념이 와닿지 않았고, 물론 지금도 학습하고 있지만 여전히 헷갈립니다.

func testPrint(emoji: String) {
    for i in 1...3 {
        print(i,emoji)
    }
}
let serialQueue1 = DispatchQueue(label: "test")
serialQueue1.async { testPrint(emoji: "🐭") }
serialQueue1.async { testPrint(emoji: "🔥") }
serialQueue1.async { testPrint(emoji: "😿") }
serialQueue1.sync { testPrint(emoji: "💡") }

serialQueue 이기 때문에 동일한 쓰레드에 task들이 차곡차곡 쌓인다

1) SerialQueue 이기 때문에 순차적인 실행이 보장되기 때문에 쥐 -> 불 -> 고양이 -> 전구 순으로 출력될 것이다

2) 동일한 쓰레드라 할지라도 비동기적으로 처리되기 때문에 쥐,불,고양이 의 순서는 섞이지 않을까?

1), 2) 중 어떤 결과가 출력될까요?

1 🐭
2 🐭
3 🐭
1 🔥
2 🔥
3 🔥
1 😿
2 😿
3 😿
1 💡
2 💡
3 💡

1) 의 결과가 출력됩니다. 그럼 대체 Serial Queue 에 Async 로 추가한 작업들은 어떤 의미가 있는 걸까요?

링크 에서 단일 쓰레드에서도 비동기작업이 가능하다 라고 이해했는데 좀 더 학습이 필요할 것 같습니다

우선, 다른 블로그들의 예제들을 통해서 하나의 가설을 세웠습니다. (물론 틀렸을 수 있습니다. 정확한 개념을 이해하고 나면 다시 수정하겠습니다.)

Serial,Concurrent 의 차이는 queue에 저장된 task 들을 쓰레드에 어떻게 할당할 것인가? 에 대한 차이이다.

  • Serial 의 경우에는 하나의 쓰레드에 task들을 넣어주고 단일 쓰레드에서는 비동기, 동기 작업 상관없이 순서가 보장된다.
  • Concurrent 의 경우에는 여러개의 쓰레드에서 동시에 작업을 진행하게 된다.

🏷 P.S.

나름 이해했다고 생각했는데 블로그에 정리하니까 뒤죽박죽이다.. 내일 다시 새롭게 도전해야겠다.

profile
개발자가 되고싶어요

0개의 댓글