55,000원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결iOS Concurrency(동시성) 프로그래밍, 동기 비동기 처리 그리고 GCD/Operation - 디스패치큐와 오퍼레이션큐의 이해
11분 25초에서 질문있습니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 선생님 강의 잘 듣고있습니다. 1) 11분 25초 "현재 메인에서 일하고 있다면" 부분이 헷갈려 질문드립니다. 저 말은 디스패치큐 메인 함수 "내부 블록"에Dispatchqueue.global.async{}가 들어갔을떄를 말하고 있는거 맞나요? 현재 메인에서 일하고 있다면 이라는 말이 헷갈려 질문드립니다ㅎㅎ 감사합니다:)
- 미해결iOS Concurrency(동시성) 프로그래밍, 동기 비동기 처리 그리고 GCD/Operation - 디스패치큐와 오퍼레이션큐의 이해
Serial queue가 한개의 스레드를 사용한다는 내용에 질문이 있습니다
안녕하세요 앨런님! 오랜만에 한가지 질문이 있어서 왔습니다~~ 1:40초 쯤에 "Serial queue는 받아들인 작업을 한개의 스레드로만 보내는 큐입니다" 라고 그림과 함께 설명 주신것을 바탕으로 "시리얼 큐가 사용하는건 특정한 하나의 스레드!"라고 이해하고 블로그를 정리했습니다. 그러던 중, 어떤 분이 댓글로 "Serial Queue 에서 하나의 스레드에만 분배된다는 게 '처음 Task를 준 스레드에게 계속해서 준다는 것' 이아니라, '동시에 하나의 Task만 처리되고 있음' 만 보장되는 걸로 알고 있어요. 시리얼 큐에 있는 Task1, Task2, Task3이 동시에 처리되진 않고 하나씩 시리얼하게 처리되되, 모든 Task들이 같은 스레드에서 처리되는 건 보장할 수 없는 거죠."라고 말씀을 주셨습니다. (이곳의 댓글입니당) 좀 더 구글링을 해본 결과 https://stackoverflow.com/questions/51057441/serial-dispatch-queue-will-use-only-one-thread 에서 실제로 같은 serial queue에 들어가는 taks 가 다른 스레드에서도 수행됨을 확인할 수 있었습니다. 결국 "serial queue는 'a' 시간 (특정 Task 실행 시간) 에 하나의 스레드만 사용. 이때 '하나의 스레드'는 '항상 같은 스레드'를 의미하지 않음. 각 태스크가 어느 스레드에서 실행될지 보장되지 않지만, 임의의 '하나의' 스레드가 작업을 수행한다는 것은 보장됨." 이라는 내용을 새롭게 이해했습니다. 혹시 앨런님께서 설명 주신 부분도 위와 같은 내용이었는데, 제가 잘못 이해하고 있었던 부분일까요? 아니면 기존에 이해했던대로 serial queue는 특정한 하나의 스레드만 사용! 이 맞는 내용인데, 제가 새롭게 잘못 알아온걸까요,,?? 감사합니다 :)
- 미해결iOS Concurrency(동시성) 프로그래밍, 동기 비동기 처리 그리고 GCD/Operation - 디스패치큐와 오퍼레이션큐의 이해
해당 코드는 어디에 저장되는 건가요??
안녕하세요^^ 열강하고 있는 iOS 개발자 지망생입니다. GCD 프로젝트 강의를 듣던 중에 캡쳐한 것과 같은 코드가 이해가 안되어 질문드립니다. 위 딕셔너리는 어느 클래스(?) 소속 일까요? UIApplication, UIWindow 등 여러 방법으로 해봤는데 없더라구요ㅠㅠ 아울러 혹시 어디 소속인지 알 수 있는 방법도 있으면 알고 싶습니다. 감사합니다^^
- 미해결iOS Concurrency(동시성) 프로그래밍, 동기 비동기 처리 그리고 GCD/Operation - 디스패치큐와 오퍼레이션큐의 이해
작업(Task)을 대기행렬(Queue)에 보낸다 라고 하셨는데
Task4가 마지막에 Thead3에 보내졌는데 Thread5에 가지 않고 Thread3보내진 다른 의미가 있는건가요??
- 미해결iOS Concurrency(동시성) 프로그래밍, 동기 비동기 처리 그리고 GCD/Operation - 디스패치큐와 오퍼레이션큐의 이해
베리어에 관한 질문입니다.
안녕하세요 강사님. 강사님 강의를 듣고 경쟁상황을 원초적으로 해결하는 방법은 여러 쓰레드가 한개의 공유자원에 접근하게 될 때 공유자원에 접근 하는 수를 시스템이 안전한 만큼 제한하는 것이라고 이해하였습니다. 그래서 예제에서 직렬큐를 사용했을 때, 이는 합리적이며 논리에 벗어나지 않는다고 생각하였습니다. 그런데 오늘 베리어를 배웠을 때 "왜 동시큐에 왜 직렬화 기능을 넣어주는 거지?" 라는 생각이 들었습니다. 만약 어떤 객체에서 동시작업과 직렬 작업을 나눠놓을 이유가 있다면 직렬 큐와 동시큐를 새로 만들면 되지 않을까 싶습니다. 물론 애플의 정책을 모두 이해 할 수는 없기에 왜 베리어를 만들었는지에 대한 답변을 기대하기는 어렵지만 혹시 직렬큐를 새로 만들지 않고 베리어를 사용하는 경우는 어떤 상황이 있을지 궁금합니다.
- 미해결iOS Concurrency(동시성) 프로그래밍, 동기 비동기 처리 그리고 GCD/Operation - 디스패치큐와 오퍼레이션큐의 이해
애니메이션 질문입니다.
비동기 함수와 관련된 작업들은 모두 컴플리션핸들러를 가지고 있는데, 4-2 애니메이션파트에서 completion부분이 escaping이 아닌것을 보았습니다. 그 이유는 무엇인가요? 혹시 애니메이션이 concurrency가 아닌 직렬에서 이루어지기 때문에 순서적으로 이루어져서인가요?
- 미해결iOS Concurrency(동시성) 프로그래밍, 동기 비동기 처리 그리고 GCD/Operation - 디스패치큐와 오퍼레이션큐의 이해
강의 11분 36초에서 질문입니다.
안녕하세요. "main.sync는 절대 사용하면 안된다"라는 부분에서 질문입니다. 1. main큐(serial큐)는 유일하게 UI작업을 처리할 수 있는 큐고 특별히 os는 UI작업을 위해서 이 main큐에서 1번쓰레드로만 작업을 보낸다고 이해하고 있습니다. 제대로 이해하고 있는게 맞나요? 2. 1번쓰레드에서 작동하는 코드에서(예를들면 TableView의 cellForRowAt메서드), 메인큐로 main.sync 작업을 추가하는 코드를 작성했다면, os는 이 작업은 main큐에 있던 것이므로 1번 쓰레드로 작업을 보내면서 동시에 sync작업이기때문에 1번쓰레드를 block시켜서 교착상태를 만들어 내는건가요? 3. 11분36초(메인큐에서는 다른큐로 보낼때 sync메서드를 부르면 안된다의 설명 부분)에 나오는 그림은 Thread1에서 Thread2로 작업이 들어가는데 Thread1의 맨 앞에서 Thread1의 맨 뒤로 task1이 들어가는 그림이어야 하는게 아닌가요?
- 미해결iOS Concurrency(동시성) 프로그래밍, 동기 비동기 처리 그리고 GCD/Operation - 디스패치큐와 오퍼레이션큐의 이해
sync, async 질문
안녕하세요. sync, async 에 대해서 잘 이해가 가지 않는 부분이 있어서 질문드립니다. 1. sync와 async는 "메인" 쓰레드에서 큐에 작업을 넣고, 이를 OS가 다른 Thread로 배분하는데 이 작업이 끝나기를 오직 "메인" 쓰레드에서 기다리는지의 여부로 이해했는데 정확한 걸까요? 메인이 아닌 다른 쓰레드에서도 sync, async 구분이 될 수 있나요? 2. 메인 쓰레드에서 큐에 async인 작업1을 넣어서 다른 쓰레드A에서 그 작업1을 하게 되었다고 하고, 그리고 그 작업1에는 또 concurrent큐에 sync인 작업2를 넣는 코드가 있었다고 합시다. 2-1. 작업2를 직접 수행하는건 쓰레드A가 되나요? 2-2. 쓰레드B는 sync 작업2를 실제로 수행할 쓰레드라고 할 때, 쓰레드A에서는 쓰레드B에서 작업 2를 끝내고 리턴될때까지 쓰레드 A의 작업1이 block되는 건가요? 쓰레드A에서 또 다른 쓰레드B로 넘어가게 될 테니 메인쓰레드가 아닌 쓰레드A에서 쓰레드B가 끝날때까지 기다리는건가 싶습니다... 잘 모르겠습니다 ㅠㅠ
- 해결됨iOS Concurrency(동시성) 프로그래밍, 동기 비동기 처리 그리고 GCD/Operation - 디스패치큐와 오퍼레이션큐의 이해
Concurrency - Image Cache 부분 질문드립니다.
안녕하세요! 방금 질문을 드렸는데 또 다른 질문이 있어 질문드립니다. Concurrency Better 코드 중 해당 라인이 있는데, 이 부분이 문제가 발생하지 않을까 생각하여 문의드립니다. 저도 구현하신 ImageCache 부분을 보고 제 개인 프로젝트에서 이러한 방식으로 Singleton Class 안에 Image Cache를 구현해 보았는데, 가끔 EXC_BAD MEMORY ACCESS 에러가 발생했습니다. 그리고 이 원인을 찾던 중 해당 글을 발견했습니다. - https://stackoverflow.com/questions/26515968/swift-access-to-dictionary-of-a-singleton-causes-exc-bad-access/28910283 - https://sachithrasiriwardhane.medium.com/thread-safe-singletons-and-their-usage-in-swift-c992d34d85dd 이 글의 요지는 Dictionary와 같은 Immutable 자료구조는 Thread-unsafe 하므로 주의해야 한다는 것입니다. 그렇다면, 강의에 있는 imageCache 부분도 문제가 있지 않을까라는 생각이 들어 질문드립니다. 제가 생각한 해결방안은 1. NSCache 자료구조를 사용하는 것 2. 클래스 안에 sync Queue를 두어서 처리하는 것입니다. 우선은 전자의 해결방안이 낫다고 생각하는데, "NSCache는 Object이므로 Mutable하니까 Thread-safe 하지 않을까?" 라는 생각을 하고 있습니다. 이 부분에 대해 어떻게 생각하시는지 질문드립니다!
- 해결됨iOS Concurrency(동시성) 프로그래밍, 동기 비동기 처리 그리고 GCD/Operation - 디스패치큐와 오퍼레이션큐의 이해
Concurrency - CustomImageView 질문드립니다.
안녕하세요, Concurrency 부분을 확인하고 있던 중 CustomImageView Class에서 lastImgUrlUsedToLoadImage 라는 프로퍼티가 있는데, 해당 프로퍼티는 왜 존재하는 것인지 궁금합니다! 이런 로직이 있던데, url과 lastImgUrlUsedToLoadImage가 다를 경우가 있나요!?
- 미해결iOS Concurrency(동시성) 프로그래밍, 동기 비동기 처리 그리고 GCD/Operation - 디스패치큐와 오퍼레이션큐의 이해
lazy var 관련 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. GCD 자료 277p에서 lazy var와 관련된 질문 사항인데요. testVar라는 변수가 클로저에 ()가 붙여져 있는데, 제가 알기론 이렇게 되어있다면, testVar을 읽을 때마다 클로저가 호출되서 async로 보내든 말든 매번 랜덤한 수가 나와야되는데 실제론 그렇지 않더라구요. GCD와 관련된 질문은 아니지만, 이걸 정확히 이해하면 뒷내용을 확실히 파악할 수 있을 것 같아서요. 혹시 이유를 알 수 있을까요? 사실상 저 변수는 클로저인데 사용할 때마다 매번 호출되어 {}에 있는 코드들이 매번 실행되어야하는 거 아닌가요? 감사합니다.
- 미해결iOS Concurrency(동시성) 프로그래밍, 동기 비동기 처리 그리고 GCD/Operation - 디스패치큐와 오퍼레이션큐의 이해
우선순위 뒤바뀜 질문 드립니다
안녕하세요 앨런님! 우선순위 뒤바뀜 강의에서 두가지정도...ㅎㅎ 궁금한 점이 있어서 질문 드립니다 1. 우선 순위가 더 높은 task 가 들어올때 이전에 실행되고 있던 작업은 우선 순위에 밀려 잠시 멈추게 된다고 설명을 주셨는데, 이건 싱글 코어나, 각 스레드가 같은 코어에서 실행될때의 cpu 할당을 말씀주시는 걸까요?? 멀티코어 환경에서 thread 2와 thread 3이 다른 코어에서 실행될때는, 우선 순위가 더 높은 task 가 들어오더라도 다른 task 가 멈추는 일은 일어나지 않겠죠..??? (사용해야하는 공유 자원이 겹치지 않는 이상..) 2. 5:40 쯤에 task 3의 작업이 빨리 처리될 수 있도록 공유 자원을 점유하고 있는 task 1의 우선순위를 높인다고 설명주셨고, ppt에는 해당 priority가 userInteractive 로 나와있습니다. 이때 높여지도록 설정된 값이 userInteractive 인 이유는 priority 중 (userInteractive ~ background) 가장 높은 값이어서가 아니라, task 3의 priority가 userInteractive기 때문에 이를 따라가는 것이 맞을까요? 감사합니다 :)
- 해결됨iOS Concurrency(동시성) 프로그래밍, 동기 비동기 처리 그리고 GCD/Operation - 디스패치큐와 오퍼레이션큐의 이해
데드락의 정의와 해결방안에 대해 질문드립니다
안녕하세요 앨런님! 데드락에 대해 강의를 듣고 정리하던 중 궁금한 점이 생겨 질문 남깁니다! 1. 데드락을 “한정된 자원을 여러 스레드에서 사용하려고 할 때, 자원을 얻지 못해 다음 처리가 어려운 상태”라고 정의할 때, “동기 작업이 현재 스레드가 필요한 경우 (3-2. sync 메소드에 대한 주의 사항)” 에서 발생하는 데드락 상황은 얻으려고 하는 “한정된 자원”을 무엇으로 정의할 수 있을까요? 저 상황에서 데드락이 발생하는 이유는 sync 로 task 를 보내서 멈춰있는 스레드에 다른 task 가 다시 할당되어서 더 이상 서로 작업을 진행할 수 없는 상황이기 때문이라고 이해하고 있습니다. 즉, 스레드는 task 가 끝나길 기다리고 task 는 끝나려면 스레드에서 실행이 되어야하는데 해당 스레드가 멈춰있는 상태 이기 때문에 서로 다음 상황으로 진행을 위한 조건이 충족이 안되고, 데드락이 발생한다! 까지는 이해가 되는데 여기서 데드락의 정의에 따라 “스레드가 얻고자 하는 한정된 자원”을 각각 무엇으로 표현할 수 있을지 궁금합니다. 이러한 데드락 상황을 “한정된 자원을 여러 스레드에서 사용하려고 할 때, 자원을 얻지 못함” 이라는 정의에 포함할 수 있을까요? 아니면 데드락의 정의를 그냥 다음 조건으로 가지 못하는 막힌 상태..? 정도로 넓게 이해해야할까요? 2. 또한 데드락에 대한 간단한 해결 방법으로 serial queue 사용을 말씀주셨습니다. 한정된 자원을 여러개의 스레드가 동시에 필요로 할때 데드락이 발생할 수 있기 때문에, 한번에 하나의 스레드만 자원(들)에 접근하도록 serial queue 를 사용하면 해결 된다는 의미로 말씀 주신것 같습니다. 하지만 이전 강의에서 본 “동기 작업이 현재 스레드가 필요한 경우”는 serial queue를 사용하더라도 데드락이 발생하게 됩니다. (ex. 메인 스레드에서 DispatchQueue.main.sync 호출) 뭔가 데드락 발생 상황과 해결 방안이 1:1로 대응되는 것 같지 않아 혼란이 오는 것 같습니다. 이런 상황은 다른 해결 방안으로 말씀 주신 “객체 등 설계시에 주의”로 해결을 해야하는 거겠지요? 혹시 잘못 이해하고 있는 부분이 있다면 같이 말씀 부탁드리겠습니다. 감사합니다!
- 미해결iOS Concurrency(동시성) 프로그래밍, 동기 비동기 처리 그리고 GCD/Operation - 디스패치큐와 오퍼레이션큐의 이해
dispatch weak 에 대해
안녕하세요! 예시를보다보니 queue.asynch { [weak self]in .... mainQueue.asynch { .... } } 이런류의 예시가있는데 아래부분에는 weak self가 없어도 되는건가요? 둘다 있어야하지않나 싶어서요! 만약 필요없는 이유가 메인큐라서 라던가 그런이유이면 메인큐가 아니더라도 위에서 weak self로 정의해주면 다음 어싱크 클로져에서 위크를 안정의해줘도되는건지 궁금합니다!
- 해결됨iOS Concurrency(동시성) 프로그래밍, 동기 비동기 처리 그리고 GCD/Operation - 디스패치큐와 오퍼레이션큐의 이해
DispatchWorkItem의 qos 관련해 질문 있습니다.
안녕하세요 앨런님~ 월요일 잘 보내셨나요 ~_~!! 다름이 아니라 DispatchWorkItem의 qos 관련해 질문이 있어 돌아왔습니다..! 허허... DispatchWorkItem(qos: .utility) { } 위와 같이 DispatchWorkItem 을 생성할 때 qos 파라미터를 통해 작업의 우선순위를 설정할 수 있는데요! 이는 기존 clousure 로 보낼 때, .async(qos: .utility) 에서 qos 를 설정해준 것과 대응되는 작업이지요? 그리고 1:20초 즈음 qos 없이 DispatchWorkItem 을 생성할때 defualt qos 는 global 이라고 설명 주시는것 같은데, 실제로 init 함수를 살펴보니 .unspecified로 지정이 되어있는 것 같더라고요. 혹시 제가 중간에 설명을 잘못 이해한걸까요 ?_? 감사합니다 :)
- 해결됨iOS Concurrency(동시성) 프로그래밍, 동기 비동기 처리 그리고 GCD/Operation - 디스패치큐와 오퍼레이션큐의 이해
Concurrency-Better 프로젝트 내 로직 관련 질문 드립니다.
안녕하세요 앨런님! 여전히 감사한 마음으로 강의 잘 듣고 있습니다 :) 다름이 아니라, 해당 프로젝트에서 loadImage(with:) 함수 안의 로직 중 이해가 잘 가지 않는 부분이 있어 질문드립니다. 해당 함수에서 "마지막으로 이미지를 다운로드한 String 경로와 해당 경로를 URL로 변환 후 추출한 absoluteString 값이 맞지 않으면 return 을 하는 부분"이 왜 필요한지 잘 이해가 가지 않습니다. (거창히 말씀드렸지만 사실 if self.lastImgUrlUsedToLoadImage != url.absoluteString { return } 부분입니다..ㅎㅎ) 이 두 값이 일치하지 않는 상황이 잘 떠오르지 않아 이 부분이 왜 필요하지?라는 생각이 드는데, 혹시 해당 상황은 어떤 경로로 재현이 될까요? 동시성과 관련된 질문은 아니지만..ㅎㅎ 그래도 궁금해서 글 남깁니다! 감사합니다 :)
- 미해결iOS Concurrency(동시성) 프로그래밍, 동기 비동기 처리 그리고 GCD/Operation - 디스패치큐와 오퍼레이션큐의 이해
Serial Queue를 사용하면 경쟁상황이 발생할 수 없지 않는지요?
9:30 쯔음에 보여주시는 예시에서요 Serial Queue를 사용하면 경쟁상황이 발생할 수 없지 않는지요? Serial Queue는 한개의 쓰레드로만 task를 보낸다고 이해해서요... Concurrency Queue였다면 여러 쓰레드로 보내지니 경쟁상황이 될것같구요
- 해결됨iOS Concurrency(동시성) 프로그래밍, 동기 비동기 처리 그리고 GCD/Operation - 디스패치큐와 오퍼레이션큐의 이해
Dispatch Group 개념 중 "wait 을 통한 동기적인 기다림"에 대한 질문입니다.
안녕하세요 앨런님! 여전히 강의 감사히 잘 듣고 있습니다 :) 그 중 Dispatch Group 개념 중 "wait 을 통한 동기적인 기다림"에 대한 두가지 궁금한점이 있어서 글을 남깁니다! 1. wait()를 통해 동기적으로 group이 끝나는것을 기다리는 방법에 “현재 대기열을 차단하는 방법"이라고 써있고, 설명도 스레드와 혼용되어 있지만, 다른 그림들이나 문맥으로 보아 정확히는 wait 을 실행하게 된 “현재 스레드”를 의미하는거겠죠? 2. “그룹 작업이 다 끝나야만 다음 작업을 할 수 있는 상황인데, 어떤 이유로 그룹의 완료 알림에 비동기적으로 응답할 수 없는 경우” 에 wait 을 쓴다고 설명을 주셨는데, 해당 경우가 잘 떠오르지 않습니다. 혹시 예시를 들어주실 만한 상황이 있을까요? 감사합니다 :)
- 미해결iOS Concurrency(동시성) 프로그래밍, 동기 비동기 처리 그리고 GCD/Operation - 디스패치큐와 오퍼레이션큐의 이해
GCD/OperationQueue와 RxSwift
안녕하세요! 현재 강의를 수강 중에 있는 학생입니다. 전공자라 어느정도 쓰레드, 비동기에 대한 기본지식은 약간 있는 상태인데 공부를 하다가 문득 궁금해져서 질문을 드립니다. 애플에서는 GCD/OperationQueue를 기본적으로 제공하지만, 요즘에는 여러 언어에서 ReactiveX를 많이 쓰고, iOS 개발자 채용공고에도 가끔 Rxswift가 우대조건으로 들어가있고 하더라고요. 이런 부분에서 궁금증이 생겼습니다. 1. GCD/OperationQueue와 RxSwift를 비교한다면 (대략적으로) 어떤 장단점? 차별점이 있을까요? 2. 실제 업무환경에서는 어떤 것이 많이 쓰이나요? 3. 만약 RxSwift를 공부한다면 (쓰레드에 대한 기본 지식(세마포어, 데드락 등)은 빼고)GCD/OperationQueue에 관한 지식이 있어야할까요? 4. 혹시 RxSwift도 강의하실 계획이 있으신가요? 질문은 여기까지입니다. 감사합니다.
- 미해결iOS Concurrency(동시성) 프로그래밍, 동기 비동기 처리 그리고 GCD/Operation - 디스패치큐와 오퍼레이션큐의 이해
5강의 2번째 유의 사항 (현재의 큐에서 현재의 큐로 동기적으로 보내면 안됨) 관련 질문입니다.
안녕하세요 앨런님 :) 5강의 2번째 유의 사항인 "현재의 큐에서 현재의 큐로 동기적으로 보내면 안됨" 관련해서 두가지 질문이 있습니다 1. 2번째 유의 사항 - 데드락 발생 가능성 때문에 현재의 큐에서 현재의 큐로 “동기적”으로 보내면 안된다라고 말씀 주셨는데, 메인 스레드에서 DispatchQueue.main.sync { } 를 하면 안되는 것도 같은 이유에서일까요?? 2. “현재의 큐”에서 “현재의 큐”로 동기적으로 보내면 안된다는 것에서 현재의 큐가 무엇을 말하는지 명확하게 와닿지 않습니다. 일단 같은 객체를 말씀하는 것은 아닌 것 같구요,,! 무조건 메인 스레드에 작업을 할당하는 메인 큐를 제외하고는 글로벌 큐, 커스텀 큐 모두(Qos 무관) 어느 스레드에 작업을 할당할지 알 수 없기 때문에 customQueue.async { globalQueue.sync { } } 이런 상황에서도 데드락의 위험은 있을 것 같습니다. 따라서 말씀하신 “현재의 큐”를 나누는 기준은 메인 큐 vs not 메인 큐가 되는 걸까요? 감사합니다!