통신을 그룹으로 묶어서 for문 돌리는 부분 질문이요!
246
작성한 질문수 1
* 반복적으로 비동기 함수들을 for문을 통해 실행을 시킬 때, completion부분에서 downloadedImages 배열에 append 시키는 부분이 있는데, downloadedImages배열 접근 시점이 비슷해도 append 메소드는 상관이 없이 다 더해지나요?
답변 1
1
안녕하세요! 창민 님! 좋은 질문 감사드립니다. :)
실제로 배열은 Thread-safe하지 않다는 사례가 아래와 같이 많이 있습니다.
https://basememara.com/creating-thread-safe-arrays-in-swift/
또, 구글에서 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





