Swift Concurrency (Part-2) 강의를 출시했습니다.
안녕하세요! 앨런입니다.
많이 기다리시던.. Swift Concurrency 강의 Part-2 부분을 출시하게 되었습니다.강의 링크: https://inf.run/rFuFe
Swift Concurrency관련하여 더 딥하게 학습하고 싶으신 분들은 강의가 분명 많이 도움이 되실 것이라고 봅니다. (전체 완강은 아직 아니지만, 현재 강의의 70%의 내용이 업로드 되었고, 나머지 30%의 내용도 3월 말까지 업로드가 될 예정입니다.)
선착순 100분께 강의 50% 할인 혜택, 그리고 그 다음 200분께 45% 할인 혜택을 드리고 있으니.. 강의 구매에 관심있으신 분들은 빠르게 선착순에 도전해 보시면 좋을 것 같네요.
(강의 페이지에 들어가시면, 상단에 선착순 할인 혜택 링크가 따로 있으니.. 꼭 확인하시고 링크를 눌러서 구매하시면 할인 혜택을 받으실 수 있습니다.🙏🏻)안녕하세요! 앨런입니다. :)
오랜만에 새소식을 올리게 되었습니다.
제 강의를 들어주시고.. 제 강의 내용을 또 정성스럽게.. 본인만의 스타일로 재해석 하신 "sujinnaljin"님의 블로그를 소개해드리고자 오랜만에 새소식을 전해 드립니다. :)
글을 너무 재밌게 잘 쓰셔서.. 저도 모든 내용을 재미있게 읽어 보았답니다.ㅎㅎ
아래의 목차와 링크를 같이 전달 드려요! 그동안 질문도 많이 해주셨고, 또 추가적으로 여러가지 내용도 직접 또 공부하셔서.. 여러가지 내용을 정리해주셨더라고요! GCD내용을 복습할 겸 들어가서 한번 보시는 것도 좋으실 것 같아요!ㅎㅎ
(그리고 GCD이외의 다른 iOS관련 내용들도 정말 쉽고 재밌게 쓰신 것도 많아서, 참고해 보시면 좋을 듯 합니다.)
["sujinnaljin"님 블로그 - GCD 관련 목차 및 링크][iOS] 차근차근 시작하는 GCD — 1: 이번엔 제발 이해하고 싶다 GCD..🥂
[iOS] 차근차근 시작하는 GCD — 2: GCD와 Operation에 대해 알아봅시다
[iOS] 차근차근 시작하는 GCD — 3: sync(동기) vs async (비동기) 를 알아봅시다
[iOS] 차근차근 시작하는 GCD — 4: Serial(직렬) vs Concurrent(동시)에 대해 알아봅시다
[iOS] 차근차근 시작하는 GCD — 5: GCD Dispatch Queue의 종류와 특성에 대해 알아봅시다
[iOS] DispatchQueue와 task의 QoS 가 다를때의 동작 방식: 차근차근 시작하는 GCD — 5 번외편
[iOS] 차근차근 시작하는 GCD — 6: GCD 사용시 주의 사항에 대해 알아봅시다
[iOS] 차근차근 시작하는 GCD — 7: Dispatch Group의 개념에 대해 알아봅시다
[iOS] 차근차근 시작하는 GCD — 8: Dispatch Group에 비동기 작업이 포함된 task 를 보내는 방법을 알아봅시다
[iOS] 차근차근 시작하는 GCD — 9: DispatchWorkItem 에 대해 알아봅시다
[iOS] 차근차근 시작하는 GCD — 10: DispatchSemaphore 에 대해 알아봅시다
[iOS] 차근차근 시작하는 GCD — 11: 동시성과 관련된 문제들 (Concurrency Problems) 중 경쟁 상태(Race Condition)에 대해 알아봅시다
[iOS] 차근차근 시작하는 GCD — 12: 경쟁 상태(Race Condition) 해결 방법에 대해 알아봅시다 — Serial queue + sync
[iOS] 차근차근 시작하는 GCD — 13: 경쟁 상태(Race Condition) 해결 방법에 대해 알아봅시다 — Dispatch Barrier
[iOS] 차근차근 시작하는 GCD — 14: 교착 상태(Deadlock)와 해결 방법에 대해 알아봅시다
[iOS] 차근차근 시작하는 GCD — 15: 우선 순위의 뒤바뀜(Priority Inversion)과 해결 방법에 대해 알아봅시다
그리고, 7월 정도에 강의 내용에 약간의 업데이트가 예정되어 있습니다. :)
런루프 / 물리적 Thread(병렬) vs 소프트웨어 Thread(동시성) / Block - NonBlock / async, await 등에 내용과 관련하여.. 이미 자료는 정리를 해놓았는데.., 현재 스위프트 문법 관련 강의를 출시 예정으로 촬영 진행중인 강의가 있어.. 그 강의 촬영 및 업로드가 완료되면 본 강의도 업데이트를 할 예정입니다!
그러면 또 좋은 강의 내용으로 보답해드릴 것을 약속드리며.. 곧 다시 뵙도록 할께요 :)
- 앨런 드림 -안녕하세요. 오랜만에 새소식으로 인사드리네요.
다름이 아니오라,
왜 UI를 메인쓰레드에서 업데이트 해야할까? 라는 질문에 대한 좋은 글이 있어, 해석본을 만들게 되었고 공유해 드리려고 합니다.
혹시나 좋은 참고 자료가 되었으면 합니다.
(글의 원본 출처)
https://medium.com/@duwei199714/ios-why-the-ui-need-to-be-updated-on-main-thread-fd0fef070e7f
(해석본 pdf자료)
https://drive.google.com/file/d/1dFw6sJsxV-huK3BoHXgDq-7rXy9yBq9l/view?usp=sharing
간단하게 요약해 드리자면,
1) UIKit의 모든 속성을 Thread-safe하게 설계하면, 느려짐과 같은 성능저하가 발생할 수 있기 때문에 그렇게 설계할 수 없다. (Thread-safe하지 않게 설계한 것은 애플의 의도다.)
2) 메인 런루프(Runloop)가 뷰의 업데이트를 관리하는 View Drawing Cycle을 통해 뷰를 동시에 업데이트 하는 그런 설계를 통해 동작하고 있는데, (메인쓰레드가 아닌)백그라운드 쓰레드가 각자의 런루프로 그런 동작을 하게되었을때, 뷰가 제멋대로 동작할 수있다. (예를 들어, 기기를 회전 했을때, 동시에 뷰의 레이아웃이 재배치되는 그런 동작을 못하게 될 수도 있다.)
3) iOS가 그림의 그리는 렌더링 프로세스(코어애니메이션 -> 렌더서버 -> GPU -> 표시)가 있는데, 여러 쓰레드에서 각자의 뷰의 변경사항 GPU로 보내면 GPU는 각각의 정보를 다 해석해야하니 느려지거나, 비효율적이 될 수 있다.
4) Texture나 ComponentKit이라는 페이스북에서 개발한 비동기적 UI 프레임워크가 있긴 하지만, View Drawing Cycle가 유사한 방식으로 적절한 타이밍에 메인 쓰레드에서 동시에 업데이트 하도록 하고 있다.
이정도 내용입니다. 사실, iOS뿐만 아니라 윈도우나 다른 OS에서도 마찬가지로 이런 위의 유사한 여러가지 이유때문에 구조적으로 메인쓰레드에서만 UI업데이트를 할 수 있도록 하고 있는 것이 아닐까, 다시 생각해보게 하는 글이었습니다.
그냥 한번쯤 생각해 볼 수 있는 주제라.. 조금의 도움이 되시길 바랍니다 ^^
감사합니다.
안녕하세요. 앨런입니다.
우선 iOS동시성 프로그래밍 강의를 수강해주셔서, 감사하다는 말씀을드립니다. :)
최근에.. 질문부분에 두분께서.. 좋은 질문을 올려주셔서,
답변을 드렸고.. 약간의 주석에서 오류가 있는부분.. 그리고 설명을 조금 더 명확히 해드리고자,
해당 부분의 영상을 다시 찍고, 편집하여서 (기존 영상 파일을 대체하여)
업로드해 놓았고, 코드 및 PDF파일도 약간 수정해서 올려놓았기에.. 혹시나 코드나 PDF파일을 다시 다운로드 받으셔도
좋을 것 같아 새소식을 올리게 되었습니다.
(혹시 참고적으로 두분의 질문 및 제 답변을 한번 훑어보셔도 조금 공부에 도움이 되실 듯합니다.^^)
해당부분은
GCD에서 3.디스패치큐(GCD) 사용시 주의해야할 사항에서
2) sync메서드에 대한 주의 사항. 즉, 현재의 큐(async)에서 현재의 큐(sync)로 보내면 안되는 이유에 관하여
조금 더 명확하게 다룬부분입니다.
(아래는 제가 강의교안 PDF에 추가한 페이지를 이미지로 캡처한 것입니다.)

PDF파일에는 위와 같은 내용을 추가해 놓았고, 참고적으로 보시면 될 것같습니다.
네.. 혹시나 추가적으로 설명이 부족하다거나 이해가 잘 되지 않는 부분이 있으시면 언제든지 질문을 올려주시면, 성심성의껏 답변해드리도록 하겠습니다.
언제나 고맙습니다. :)
언제든지 편하게 질문을 올려주시면, 성심성의껏 답변을 드리도록 하겠습니다.
고맙습니다. ^^







