안녕하세요! 3강 6분 30초 부터 “func2가 스레드 제어권을 운영체제에 양보했다가 func2의 실행이 끝나면 재개되고 함수가 리턴” 이라는 내용이 나오는데요. 관련하여 아래 세 가지 문의 드립니다. 재개 <- 운영체제에서 func2로 스레드 제어권이 돌아온다는 건가요? 어떤 의미로 쓰인 말인지 궁금합니다. func2가 리턴 될 때 스레드 제어권이 func2에 있었다면(1의 상황), 리턴 시점에 제어권도 func1로 돌아가는 게 맞나요? 결과적으로 func2가 리턴 될 때 스레드 제어권이 func2에서 func1로 양도되는 것은 GDC / Swift Concurrency 동일한건가요? 답변 주시면 감사하겠습니다. (_ _)
안녕하세요! 영상에서처럼 과거에는 한글입력이 어려웠는데, 이번에 새로 맥미니 m4를 구매한 후 최신 xcode를 사용해서 다시 공부하던 중입니다. 시뮬레이터가 오히려 지금 한글은 입력이 잘되는데(자간 모음 글자형태로 잘 만들어짐) 영어가 입력이 안되네요,,,, 시스템상에서 한/영 은 잘 왔다갔다하고, 다른 웹이나 프로그램에선 한/영 잘 되는데, 시뮬레이터 안에서만 영어가 입력이 안되는건 혹시 어떤 문제인지 아실까요?
안녕하세요. 10강 내용 중 질문이 있습니다. 6분 20초 정도 시간대인데요. 위 코드의 106 line에서의 쓰레드가 2번 쓰레드일 경우, doSomething() 메서드 자체가 2번 쓰레드에서 실행된다고 말씀하셨는데요. doSomething() 메서드가 2번쓰레드에서 실행될지, 다른 쓰레드에서 실행될지는 알 수 없는 것 아닌가요? 즉, async 메서드가 실행되는 쓰레드와 await 호출 직전 시점의 쓰레드가 반드시 같지는 않을 수도 있는 것으로 알고있어서 질문드립니다. 감사합니다.
안녕하세요, ImageProject 관련하여 설명해주신 내용 중 궁금한 점이 있어 문의드립니다. 1. await imageDownloader.cache.keys.contains(url) 와 let keys = await imageDownloader.cache.keys if keys.contains(url) 중에 후자를 사용하는 것이 액터 재진입에 있어 더욱 안정적인 코드라고 말씀하셨는데요 액터 재진입 관점에서는 전자의 코드가 actor isolated 된 상태에서 contain 여부까지 확인이 되고 후자의 코드는 key값을 가져오고 contain 여부를 판단하는 시점에 actor에 다른 태스크가 진입하여 값이 변경될 가능성이 있기 때문에 전자가 더 안정적인 코드가 아닌가요? 어떤 이유 때문에 후자의 코드를 사용해야하는지 다시 설명해주시면 감사하겠습니다. 2. private let storage = DiskStorage() 의 코드는 Global actor 'ImageDatabase'-isolated default value in a actor-isolated context 오류를 발생시켜 storage를 추후에 초기화 하도록 수정해주셨는데요 private lazy var storage = DiskStorage() 으로 하면 storage가 호출되는 시점에 초기화 되니 그 때에는 이미 actor의 격리영역이 정해진 상태라 이상이 없을 것이라고 생각했습니다만 같은 오류가 발생하더라구요. @ImageDatabase 로 격리되어 있기 때문에 비동기적으로 초기화되어야 하지만 그렇지 못하기 때문에 오류가 발생하는 것인지 궁금합니다. 감사합니다.
안녕하세요. 강의를 통해 많은 도움을 받고 있습니다.! 다름이 아니라, 17강 - 11분20초 부분에서 "작업의 결과를 모을 때는 하나의 thread에서만 동작하게 됩니다. 예를 들자면 2번 thread 하나에서만 비동기 반복문이 동작하게 되는거에요" 라고 설명을 해 주셨는데 제가 이해한 바로는 'Swift Concurrency는 thread관점에서 벗어나서, Task라는 작업의 단위를 기준으로 비동기 관리를 한다' 라고 이해하고 있습니다. 때문에, "비동기 반복문에서도 await을 통해 비동기 결과를 받고 있는데, 이 때 특정 thread에 고정된다는 것이 보장 될 수 있는건가?" 하는 궁금증이 생겨서 질문드립니다! 만약 하나의 thread에 고정되어 있다면, group을 통해서 결과가 넘어오게 될 때, 자식 Task중 과도하게 오래걸리는 작업이 있다고 가정하면 비동기 반복문이 실행되는 특정 thread가 계속 blocking되는건가? 하는 의문이 들어서요,,,!
강의 관련된 질문은 언제나 환영입니다 😄 코드 관련 상세하게 작성해주시면 더 좋아요! (상세코드를 붙여넣기 해주세요) 마크다운을 사용해서 편리하게 글을 작성하세요 먼저 유사한 질문이 있었는지 먼저 검색 해보는 습관~ 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요 LocalViewBuilder에서 numberPlate에 ViewBuilder 매크로를 사용해야되는 이유를 LocalViewBuilder에 선언된 ViewType을 사용하려면 이라고 설명해주셨는 데, 그것과는 상관없이 numberPlate 안에서 분기 처리된 항목들(view1, view2, view3)이 다 다른 타입(Text, VStack, Image)이라서 ViewBuilder 매크로를 사용해야되는 것이 아닐까요 ?? 설명 듣다가 헷갈려서 질문드립니다.
안녕하세요. 10강 내용 중 8분 40초 즈음에 Task 가 여러 개일 경우 '동일 시점에 여러개의 쓰레드에서 접근/사용 가능성이 있기 때문에' Race Condition이 발생할 수 있다고 설명해주셨는데요. 교재 10p에서 'Task는 현재 실행중인 컨텍스트의 메타데이터를 그대로 상속해서 사용'한다고 설명하고 있고, 메타데이터에는 '실행 액터'도 포함되어 있어서(현재 시점에서는 액터를 쓰레드와 비슷한 의미로 이해하고 있습니다.) , Task 클로저 외부와 내부의 액터(~= 쓰레드?)는 같을 것 같은데요. 이로 미루어 봤을 때, Task 1과 Task 2의 클로저가 실행되는 쓰레드도 같아야 할 것 같다는 생각이 들더라구요. (swift 6모드에선 비동기 컨텍스트에서 Thread.current에 접근할 수 없어 swift 5 모드로 실행했습니다.) 간단히 테스트 해봤을 때 위처럼 두개의 Task의 클로저가 실행되는 쓰레드가 메인 쓰레드로 같은데요. 이는 test() 메서드가 MainActor에서 실행되기에(@MainActor) 이와 같은 쓰레드에서 실행되는 것으로 이해했습니다. 제가 잘못 이해하고 있는 지점이 있을 것 같은데요. 뒷 내용을 아직 듣지 못했지만 참지 못하고 질문드려봅니다! ㅎㅎ 답변해주시면 감사하겠습니다!
안녕하세요, 강의를 들으면서 생긴 질문 세가지가 있습니다. 답변해주시면 너무 감사드리겠습니다. Swift Concurrency에서 NSLock을 사용해도 되나요? 이전 GCD환경에서 데이터 동기화를 위해 사용하던 NSLock을 Swift Concurrency환경에서 사용해도 같은 효과 를 볼수있을지 궁금합니다. Actor에 접근할때는 await으로 Task를 따서 비동기적으로 접근하는데, 기존에 비슷한 참조타입인 class에 접근하는것보다 속도가 느려지는 이슈 는 없을까요? cpu에서 context switch를 하면, 저장하고 로딩하는 동기화하는 작업때문에 컨텍스트 스위칭이 비효율적이다 라고 설명해주셨는데, 그럼 swift concurrency에서는 task가 다른 cpu(다른 쓰레드) 에서 재개되는것도 동기화작업 이 필요할텐데 이 작업은 비싼(?) 비효율적인 작업이 아닌가요? 질문이 조금 많은데.. 액터까지 강의 들으면서 궁금했던 점이라 부탁드립니다.
안녕하십니까? 강사님 강의를 열심히 듣고 있는 중입니다. 363강 Step #29 - Timer를 실습하던중 의문점이 생겨서 문의 드립니다. 30초에 타이머가 일시정지하게끔 하거나 중지시키게 하면 항상 2-3초의 오차가 발생합니다. 이게 소스상의 문제인지 아님 다른 문제인지 알수가 없어서 문의 드립니다.
Ui 설정에서 Text. Label에서 add new constrain을 설정하는데, top, leading, height 등을 설정할 때 어떤 거는 top, leading만 설정하고 다른 것은 top, leading, trailing 등을 설정하는데 이유가 무엇이고 그러한 설정을 하는 기준이 무엇인지 궁금합니다!