인프런 커뮤니티 질문&답변

김도형님의 프로필 이미지
김도형

작성한 질문수

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

3강에서요

작성

·

616

1

초반에 동기/비동기 설명하신 부분, 동기/비동기가 아니라 블록/논블록을 설명해주시고 있는 거 아닌가요?

아니 동기/ 비동기 랑 블록/ 논블록을 혼합해서 설명하시는 것 같은데

동기/비동기 , 블록/논블록 구분해서 설명 부탁드립니당

답변 5

1

앨런(Allen)님의 프로필 이미지
앨런(Allen)
지식공유자

네 도형님 안녕하세요.^^

저도 예전에 동기/비동기 주제를 공부할때, 검색시에 다른 언어에서 블록/논블록의 개념이 자꾸나와서 헷갈렸던 경험이 있었는데 좋은 질문을 해주셔서 감사합니다.

일단 결론부터 말씀드리면 iOS프로그래밍에서는 동기는 Blocking의 개념으로, 그리고 비동기는 Non-Blocking의 개념으로만 사용하고 있습니다. 해외 등 여러가지 자료에서도 Swift나 iOS에서는 따로 Blocking/Non-Blocking의 개념에 대해서는 설명하는 자료가 없더라고요.

그래서 제 강의에서도, 실제 애플이 생각하는 개념인 iOS에만 맞추어서 따로 설명드리지 않았던 것이고요.

다만, 질문을 주셨으니 답변을 해드리자면,

위에서 정리한 것처럼 정확하게 말씀드리자면..

▶︎ Blocking / Non-Blocking은 호출되는 함수가 바로 리턴하느냐 마느냐가 중요한 개념이고,

  1) Blocking - 즉시 리턴하지 않음 (일을 못하게 막음)

  2) Non-Blocking - 즉시 리턴

▶︎ 동기 / 비동기작업완료여부를 호출한 함수가 신경쓸 것인지, callback이 신경쓸 것인지에

  1) 동기 - 호출한 함수가 작업완료 신경씀

  2) 비동기 - callback이 작업완료 신경씀

관한 개념입니다. 제가 위에 그림으로도 표현해봤으니 한번 보시면 좋을 것 같고. 다만 이런 개념이 합쳐서 Blocking & Async는 어차피 다른 일을 못하니 일부러 사용하는 경우는 없다고 합니다.

(위의 그림을 보시면서 한번 생각해보시면 될 것 같습니다. ^^)

네, 그리고 두번째 질문으로 언어적 특성 때문인가?에 대해서 말씀해 주셨듯이.. 제가 애플이 어떤 의도로 동기/비동기 개념으로만 설계한 것인지는 잘 모르겠습니다..(제가 깊게 공부한 언어도 Swift가 일단 유일해서요..) 일단 제가 아는 선에서 뇌피셜로 말씀드리자면, 다른 언어들은 동기/비동기/블로킹/논블로킹의 여부를 함수 자체의 호출 여부로 판단하고 있는 것 같습니다.

그런데, Swift에서는 클로저 안에서 함수의 호출을 여러개로 묶을 수 있고, 클로저 단위를 작업단위로 다루고 있기 때문에, 함수 단위로 나누었을 때 작업 완료를 지속적으로 확인할 수있는 동기적 - NonBlocking의 개념을 사용하지 않는 것이 아닐까? 추측되고 있습니다. (클로저내에 함수가 여러개 일때 그 작업이 정말 다 완료된 것인지 확인하는 방법이 비효율적일 것 같습니다. 다른 언어에서는 함수 호출 여부로 판단하니 호출한 스택프레임 하나만 확인하면 되지만, 스위프트는 클로저로 묶어서 여러개의 스택프레임을 일정하게 묶어서 확인 할 수 있는 그런게 어렵지 않을까.. 뭐 이런 추측이요..)

혹시 궁금하신 부분이 해결되시길 바라며..

https://drive.google.com/file/d/16puFZy9oM-mrjjPuQRs3NTDwhIRNy8kO/view?usp=sharing

혹시나 위의 표 정리 내용이 필요하시면 위의 링크에서 다운 받으셔서 활용하시면 될 것 같습니다.

고맙습니다. :)

그리고 혹시 다른 분이 글로 써놓으신 좋은 예가 있는 것 같아서 링크 달아드려요.. 위의 그림과 함께 보시면 좋을 것 같네요!

https://siyoon210.tistory.com/147

1

김도형님의 프로필 이미지
김도형
질문자

아니면 혹시 Swift에서는 블록/논블록 개념을 생략하고 동기/비동기로만 설명이 가능할 수 있는건가여

언어적인 특성상 동기/비동기로만 설명가능한 것인지 말씀 부탁드립니다.

0

김도형님의 프로필 이미지
김도형
질문자

넵, 감사합니다

0

앨런(Allen)님의 프로필 이미지
앨런(Allen)
지식공유자

네 그리고 실제로 애플에서도 저와 똑같은 방식으로, 그렇게 설명하고 있습니다.

https://developer.apple.com/videos/play/wwdc2016/720/

참고해보시면 좋을 것 같네요. 해당 영상은 wwdc2016에서 Concurrent Programming With GCD in Swift3 영상입니다.

감사합니다.

0

김도형님의 프로필 이미지
김도형
질문자

말씀하신것처럼 iOS에서는 Sync는 블로킹처럼, Async는 논블로킹처럼 작동한다고 생각하면 코드의 흐름을 볼 때 문제가 없을 것 같습니다. 답변 감사합니다 .

김도형님의 프로필 이미지
김도형

작성한 질문수

질문하기