inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

앨런 iOS Concurrency(동시성) - 디스패치큐와 오퍼레이션큐의 이해

2) 디스패치 그룹의 사용 (비동기 디스패치 그룹)

통신을 그룹으로 묶어서 for문 돌리는 부분 질문이요!

246

전창민 전

작성한 질문수 1

1

* 반복적으로 비동기 함수들을 for문을 통해 실행을 시킬 때, completion부분에서 downloadedImages 배열에 append 시키는 부분이 있는데, downloadedImages배열 접근 시점이 비슷해도 append 메소드는 상관이 없이 다 더해지나요?

ios swift

답변 1

1

앨런(Allen)

안녕하세요! 창민 님! 좋은 질문 감사드립니다. :)

실제로 배열은 Thread-safe하지 않다는 사례가 아래와 같이 많이 있습니다. 

https://basememara.com/creating-thread-safe-arrays-in-swift/

https://stackoverflow.com/questions/28784507/adding-items-to-swift-array-across-multiple-threads-causing-issues-because-arra

또, 구글에서 swift + array + thread-safe와 같은 단어들만 조합해서 찾아봐도 실제로 창민 님이 말씀하신 사례들은 많이 찾으실 수가 있고요. 

실제로 위와 같은 thread-safe하지 않은 모든 가능성을 배제하려면

append함수 같은 경우는 다시 serial큐로 보내는 것을 권장한다는 내용도 WWDC에서 다루었던 것으로 기억하고 있습니다.

(이 자료를 제가 본 기억이 있는데.. 지금 찾을 수가 없네요.ㅠ)

그래서, 수업에서 다루었던 시리얼큐, 배리어, 세마포어 등을 이용하셔도 무방할 것이라고 생각됩니다. 이것이 "이론적으로는" thread-safe하게 배열을 다루는 방법이 맞다고 생각됩니다.

다만, (실질적으로? 실무적으로?) 아주 빠른 시간(밀리미초 이내?)에 배열에 동시에 접근하지 않지 않으면 염려하시는 일은 잘 일어나지 않으리라고 생각 됩니다. 만약 배열에 접근하는 시점이 for문에서 시작점이라면 동시에 밀리미초 이내에 접근할 가능성이 있기에 염려스럽지만, 이미지를 다운로드 하고 완료 시점이 for문의 시작점보다는 (그렇게 빠른 시간내에 일어날 것 같지는 않기 때문에..) 크게 신경을 쓰지 않아도 될 것 같다는 것이 제 뇌피셜 입니다...

결론은.. 이론적으로 Thread-safe하지 않은 모든 가능성을 배제한 코드를 작성하려면, 시리얼 큐 등의 방법을 쓰는 것이 올바르고 다운로드 작업의 완료 성격을 봤을때 실질적으로 무방할 것 같다라고 생각이 든다는 것입니다.

생각하신 질문에 올바른 답변이 되었길 바라며.. 혹시 다시 궁금하시면 다시 질문 남겨주세요 ^^

감사합니다. :)

오퍼레이션 큐 질문

0

128

2

2) 오퍼레이션큐(OperationQueue) 강의 질문입니다

0

145

2

warning 뜸

0

151

1

수업자료 markup 에 대해 궁금합니다!

0

273

1

예제 프로젝트 빌드 실패

0

331

2

serial 큐 질문드립니다.

0

252

1

[7-3.DispatchBarrier] 예제 코드 질문

0

325

1

안녕하세요, GCD 관련 질문드립니다..

0

284

1

main.async 작동 질문(+ vs global(),async)

0

432

1

dismiss 되었을 때 종료질문

0

303

1

'동기'와 '동시성 프로그래밍'에 대해 질문드립니다.

0

492

2

Dependency Protocol 관련

1

365

1

시리얼 큐와 sync 관련

0

464

2

sync이지만 Queue에 넣으면 async로 동작한다는 말의 의미

0

645

1

lazy var 이슈로 생긴 여러 변수들은 어디에 있나요?

0

385

1

global큐에 sync로 작업을 보냈을 때는 터지지 않는 이유가 궁금합니다.

1

501

2

비동기 개념에서 무엇을 return하는 거죠??

0

391

1

안녕하세욤

1

339

1

Barrier 작업 관련 질문입니다.

1

340

1

디스패치 그룹

1

381

1

global async안에 global async를 만들게되면 어떻게 되나요??

2

380

2

동기적 함수를 비동기적 함수로 바꾸는 부분에서 질문 있습니다

1

285

2

비동기오퍼레이션 관련 질문

1

370

1

강의자료는 어디에 있나요?

1

321

1