묻고 답해요
156만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨앨런 Swift Concurrency for Swift 6 (Part-2)
3강 스레드 제어권 관리 질문드립니다
안녕하세요!3강 6분 30초 부터 “func2가 스레드 제어권을 운영체제에 양보했다가 func2의 실행이 끝나면 재개되고 함수가 리턴” 이라는 내용이 나오는데요.관련하여 아래 세 가지 문의 드립니다.재개 <- 운영체제에서 func2로 스레드 제어권이 돌아온다는 건가요? 어떤 의미로 쓰인 말인지 궁금합니다.func2가 리턴 될 때 스레드 제어권이 func2에 있었다면(1의 상황), 리턴 시점에 제어권도 func1로 돌아가는 게 맞나요? 결과적으로 func2가 리턴 될 때 스레드 제어권이 func2에서 func1로 양도되는 것은 GDC / Swift Concurrency 동일한건가요? 답변 주시면 감사하겠습니다. (_ _)
-
해결됨앨런 Swift Concurrency for Swift 6 (Part-2)
10번 강의 관련하여 질문드립니다.
안녕하세요. 10강 내용 중 질문이 있습니다.6분 20초 정도 시간대인데요.위 코드의 106 line에서의 쓰레드가 2번 쓰레드일 경우, doSomething() 메서드 자체가 2번 쓰레드에서 실행된다고 말씀하셨는데요. doSomething() 메서드가 2번쓰레드에서 실행될지, 다른 쓰레드에서 실행될지는 알 수 없는 것 아닌가요? 즉, async 메서드가 실행되는 쓰레드와 await 호출 직전 시점의 쓰레드가 반드시 같지는 않을 수도 있는 것으로 알고있어서 질문드립니다. 감사합니다.
-
해결됨앨런 Swift Concurrency for Swift 6 (Part-2)
ImageProject 관련 문의
안녕하세요,ImageProject 관련하여 설명해주신 내용 중 궁금한 점이 있어 문의드립니다. 1.await imageDownloader.cache.keys.contains(url)와let keys = await imageDownloader.cache.keysif keys.contains(url)중에후자를 사용하는 것이 액터 재진입에 있어 더욱 안정적인 코드라고 말씀하셨는데요액터 재진입 관점에서는 전자의 코드가 actor isolated 된 상태에서 contain 여부까지 확인이 되고후자의 코드는 key값을 가져오고 contain 여부를 판단하는 시점에 actor에 다른 태스크가 진입하여 값이 변경될 가능성이 있기 때문에전자가 더 안정적인 코드가 아닌가요?어떤 이유 때문에 후자의 코드를 사용해야하는지 다시 설명해주시면 감사하겠습니다. 2. privatelet storage = DiskStorage()의 코드는Global actor 'ImageDatabase'-isolated default value in a actor-isolated context오류를 발생시켜 storage를 추후에 초기화 하도록 수정해주셨는데요privatelazyvar storage = DiskStorage()으로 하면 storage가 호출되는 시점에 초기화 되니 그 때에는 이미 actor의 격리영역이 정해진 상태라 이상이 없을 것이라고 생각했습니다만같은 오류가 발생하더라구요.@ImageDatabase 로 격리되어 있기 때문에 비동기적으로 초기화되어야 하지만 그렇지 못하기 때문에 오류가 발생하는 것인지 궁금합니다. 감사합니다.
-
해결됨앨런 Swift Concurrency for Swift 6 (Part-1)
비동기 반복문은 하나의 thread에서만 동작하게 되나요??
안녕하세요.강의를 통해 많은 도움을 받고 있습니다.!다름이 아니라, 17강 - 11분20초 부분에서 "작업의 결과를 모을 때는 하나의 thread에서만 동작하게 됩니다. 예를 들자면 2번 thread 하나에서만 비동기 반복문이 동작하게 되는거에요" 라고 설명을 해 주셨는데제가 이해한 바로는 'Swift Concurrency는 thread관점에서 벗어나서, Task라는 작업의 단위를 기준으로 비동기 관리를 한다' 라고 이해하고 있습니다.때문에, "비동기 반복문에서도 await을 통해 비동기 결과를 받고 있는데, 이 때 특정 thread에 고정된다는 것이 보장 될 수 있는건가?" 하는 궁금증이 생겨서 질문드립니다!만약 하나의 thread에 고정되어 있다면, group을 통해서 결과가 넘어오게 될 때, 자식 Task중 과도하게 오래걸리는 작업이 있다고 가정하면 비동기 반복문이 실행되는 특정 thread가 계속 blocking되는건가? 하는 의문이 들어서요,,,!
-
해결됨앨런 Swift Concurrency for Swift 6 (Part-2)
10강 내용 문의드립니다.
안녕하세요. 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 for Swift 6 (Part-2)
강의를 들으면서 생긴 질문이 있습니다.
안녕하세요, 강의를 들으면서 생긴 질문 세가지가 있습니다. 답변해주시면 너무 감사드리겠습니다. Swift Concurrency에서 NSLock을 사용해도 되나요? 이전 GCD환경에서 데이터 동기화를 위해 사용하던 NSLock을 Swift Concurrency환경에서 사용해도 같은 효과를 볼수있을지 궁금합니다. Actor에 접근할때는 await으로 Task를 따서 비동기적으로 접근하는데, 기존에 비슷한 참조타입인 class에 접근하는것보다 속도가 느려지는 이슈는 없을까요? cpu에서 context switch를 하면, 저장하고 로딩하는 동기화하는 작업때문에 컨텍스트 스위칭이 비효율적이다 라고 설명해주셨는데, 그럼 swift concurrency에서는 task가 다른 cpu(다른 쓰레드) 에서 재개되는것도 동기화작업이 필요할텐데 이 작업은 비싼(?) 비효율적인 작업이 아닌가요? 질문이 조금 많은데.. 액터까지 강의 들으면서 궁금했던 점이라 부탁드립니다.
-
해결됨앨런 Swift Concurrency for Swift 6 (Part-2)
협력적 쓰레드 풀에서 쓰레드 운영방식 질문 드립니다.
3강 협력적 쓰레드 풀에서 쓰레드 운영방식에 대한 질문 드립니다.보통 컴퓨터 살때 8코어, 10코어..이런식으로 얘기 하잖아요..CPU당 하나의 쓰레드를 만들어서 운영한다면 Swift Concurrency에서는 8개, 10개 정도의 쓰레드만 가지고 동작하는건가요?
-
미해결떠먹는 자바스크립트 비동기
교안 어디있나요?
교안 어디서 다운받나요?
-
해결됨앨런 Swift Concurrency for Swift 6 (Part-1)
25.05.13일 업데이트 내용 문의
안녕하세요. 25.05.13일 업데이트 표시됐는데 어떤 부분인지 알 수 있을까요?
-
해결됨앨런 Swift Concurrency for Swift 6 (Part-1)
5강 weak self 처리 관련
안녕하세요! Swift Concurrency 강의 너무 잘 듣고 있습니다. 5강 weak self 처리 관련하여 질문이 있는데요. Task 클로저의 경우 작업이 끝나는 즉시 내부 클로저가 소멸하기 때문에 클로저 내부에서 캡처된 참조도 해조되어 강한 순환 참조가 발생하지 않는다고 나와있는데, 이는 DispatchQueue에 전달하는 클로저에서도 마찬가지 아닌가요? DispatchQueue에 전달된 클로저도 작업이 완료되면 메모리에서 해제되는 것으로 알고 있어서, 약간의 혼란이 생겼습니다. DispatchQueue.global().async { self.processData() // self를 강하게 캡처 } // 클로저가 실행되는 동안 self가 메모리에 유지되며, 작업 완료 후 클로저가 해제되면 self도 참조카운트가 감소되는 것으로 알고 있습니다.그렇다면 Task와 DispatchQueue의 차이점은 'self를 명시적으로 쓸 필요 없다/써야 한다' 뿐이지, 순환 참조 관련된 처리는 다르지 않지 않을까 하는 고민인데요. 뭔가 제가 잘못 이해한 부분이 있을 것 같습니다. 혹시 이 부분 설명 해주실 수 있으실까요? 더불어서 Task를 쓰면 순환 참조가 생길 가능성 자체도 없는 것인지도 궁금합니다. 감사합니다 😊
-
미해결떠먹는 자바스크립트 비동기
교안 어디서 찾아야하나요?
동기와 비동기 개념동기와 비동기 개념이전다음봤어요커리큘럼질문&답변노트채팅스크립트 질문&답변제목
-
미해결앨런 Swift Concurrency for Swift 6 (Part-1)
Task 클로저에서 weak self 미사용에 대해 질문드립니다!
양질의 강의 만들어주셔서 업무에 많이 도움이 될 것 같아 먼저 감사의 말씀 드립니다:)'Task(작업)과 self 사용 관련 및 캡처리스트의 weak self 사용 (5강)'에서 질문 드립니다. Task 클로저 내에서 weak self를 생략하더라도 메모리 누수 관점에서 문제가 없는 것은 이해가 되었습니다!다만, GCD를 Task로 전환하는 관점에서 생각해봤는데요 'self가 해제된 시점'에서 'weak self 사용'한 'GCD 클로저'에서는 내부 동작이 실행되지 않을 것 같은데요'self가 해제된 시점'에서 'weak self 미사용'한 'Task 클로저'에서는 내부 동작의 실행이 보장될 것 같은데 제가 이해한게 맞을지 궁금합니다!길지 않은 비동기 작업이더라도 미세하게 동작 차이가 발생할 수 있는 부분이 아닐까 싶어 질문 드렸습니다!
-
해결됨앨런 Swift Concurrency for Swift 6 (Part-2)
안녕하세요. 액터 홉핑 관련 질문드립니다.
📌자주하는 질문 모음링크: https://pointed-earwig-996.notion.site/Swift-Concurrency-for-Swift-6-Part-2-1acbbab5ec9280a0944edcab00e027dd?pvs=4 자주하는 질문을 먼저 확인 부탁드리며, 질문은 최대한 구체적으로하셔야 빠르게 답변드릴 수 있습니다. [질문 예시](1) 몇강, 몇초의 내용이 잘 이해가 안갑니다. (제가 적어놓은 강의 번호 "10강, 7분 강의 내용 중에... " )(2) 강의자료 몇 페이지의 내용이 잘 이해가 안갑니다.(3) 정확하게 어떤 포인트에 대한 내용이 이해가 안갑니다. 다시 설명해주실 수 있나요 안녕하세요. 실행자(executor)와 액터 홉핑(actor hopping)과 관련해 질문이 있어요. 액터에 실행자 개념까지 나오니 너무 헷갈리네요. 액터 홉핑이 일어나게 되면, 액터에 내장되어 있는 실행자(executor)가 전환되고, 이는 곧 액터에서 실행되는 스레드의 묶음이 바뀌는 것이니, (실행 컨텍스트는 물론) 스레드 컨텍스트 스위칭이 일어날 수 있다라고 보는 게 맞을까요? 메인 액터-일반 액터 간 홉핑은 메인 스레드와 협력형 스레드 풀 간의 전환이니, 실행 컨텍스트와 스레드 컨텍스트 전환이 무조건 일어나는 게 맞을까요? 일반 액터-일반 액터 간 홉핑은 모두 Swift 동시성이 기본으로 제공해주는 직렬 실행자(serial executor)에서 실행되고, 이 직렬 실행자는 협력형 스레드 풀에서 실행되는 것이니, 실행 컨텍스트 전환은 일어날 수 있어도 스레드 컨텍스트 스위칭은 일어날 수도 있고, 일어나지 않을수도 있다고 보는 게 맞을까요?(플레이그라운드에서 Thread.current로 찍어 실험을 해봤을 땐, 모두 동일한 스레드에서 실행되는 걸로 보입니다)
-
미해결앨런 Swift Concurrency for Swift 6 (Part-1)
업데이트 예정 강의 공개 일정이 궁금합니다.
안녕하세요.part1 강의에서 업데이트 예정 항목이 몇가지 있는데요. 해당 영상은 언제쯤 공개 되는지 궁금합니다. (업데이트) TaskGroup 실행함수 파라미터 추가 관련 업데이트 예정(업데이트 예정) 취소 핸들러 관련 내용 업데이트 예정 (API 업데이트)
-
미해결앨런 Swift Concurrency for Swift 6 (Part-1)
29강 async let 작업 취소 부분 질문
📌 자주하는 질문 모음링크: https://pointed-earwig-996.notion.site/Swift-Concurrency-for-Swift-6-Part-1-22eecb0b83154ac28c7c66446f6e54e1?pvs=4 자주하는 질문을 먼저 확인 부탁드리며, 질문은 최대한 구체적으로하셔야 빠르게 답변드릴 수 있습니다. [질문 예시](1) 몇강, 몇초의 내용이 잘 이해가 안갑니다. (제가 적어놓은 강의 번호 "10강, 7분 강의 내용 중에... " )(2) 강의자료 몇페이지의 내용이 잘 이해가 안갑니다.(3) 정확하게 어떤 포인트에 대한 내용이 이해가 안갑니다. 다시 설명해주실 수 있나요?29강 17:10 ~ 18:00 사이 내용에 질문이 있습니다.CASE2에서 배열이나 튜플로 구현하는 경우 취소 전파가 늦게 된다고 적혀있고 설명도 그렇게 해 주시는데, CASE1에 비해 취소 전파가 늦게 될 수 있다고 이해가 되는데요.CASE2는 CASE1에 비해 try await을 연달아서 사용하지 않아도 된다는 점만 다르고, 나열하는 순서대로 실행되는 동작 자체는 동일한것 같은데 두 case가 실제로 차이가 있는건가요? 두 case가 완전히 동일하게 동작하는 것 같은데 차이가 있는 것처럼 설명하시는것 같아서 제가 잘못 이해한 것인지 궁금합니다.
-
해결됨앨런 Swift Concurrency for Swift 6 (Part-2)
재개될 때 스레드 변경시 왜 컨텍스트 스위칭이 발생하지 않는 건가요?
📌 자주하는 질문 모음링크: https://pointed-earwig-996.notion.site/Swift-Concurrency-for-Swift-6-Part-2-1acbbab5ec9280a0944edcab00e027dd?pvs=4안녕하세요. 몇 가지 궁금한점이 있어서 질문남겨요.part.1의 7강, 책 26페이지에서 멈췄다가 다시 실행될때 다른 쓰레드에서도 실행될 수 있다고 되어있는데요.우선 제가 이해한 것은기존의 프로세스(앱)하나당 여러개로 나뉘어서 쓰던 쓰레드가 CPU-프로세스-쓰레드 각 하나씩으로 연결로 바뀌었다.하나의 쓰레드에서 멈췄다 재개했다를 반복하며 재개 전까지 다른 일을 처리할 수 있게 됐다.그래서 프로세스 내부에서 일어나던 컨텍스트 스위칭이 없어졌다.제가 헷갈리는 부분은 아래와 같아요.현재강의 3:15에 보면 한 쓰레드에서 멈췄다 재개했다 하며 중간에 다른 일도 처리하고 하는걸로 보여요. 그래서 컨텍스트 스위칭이 일어나지 않는다고 이해했어요. 그런데 다른쓰레드에서 재개되면 쓰레드가 바뀌는데 왜 컨텍스트 스위칭이 일어나지 않는 건가요?CPU당 하나씩 쓰레드를 가지게 되면 최대 동시 실행할 수 있는 앱은 CPU코어수 만큼으로 제한되나요?
-
미해결앨런 Swift Concurrency for Swift 6 (Part-1)
Task를 함수 내부에서 사용했을 때 값의 변화를 예상하는 법
📌 자주하는 질문 모음링크: https://pointed-earwig-996.notion.site/Swift-Concurrency-for-Swift-6-Part-1-22eecb0b83154ac28c7c66446f6e54e1?pvs=4 자주하는 질문을 먼저 확인 부탁드리며, 질문은 최대한 구체적으로하셔야 빠르게 답변드릴 수 있습니다. [질문 예시](1) 몇강, 몇초의 내용이 잘 이해가 안갑니다. (제가 적어놓은 강의 번호 "10강, 7분 강의 내용 중에... " )(2) 강의자료 몇페이지의 내용이 잘 이해가 안갑니다.(3) 정확하게 어떤 포인트에 대한 내용이 이해가 안갑니다. 다시 설명해주실 수 있나요? 안녕하세요 엘런님, 강의를 들으면서 swift concurrency를 적극 활용해보고 있는 중입니다.코드를 작성하고 나서 테스트 코드를 작성하면서 의문이 생기게 되었는데요,class viewmodel { @Published private(set) var count = 0 enum Event { case buttonTapped } // viewcontroller에서 호출하는 함수 func dispatch(_ event: Event) { Task { switch event { case .buttonTapped: count += await fetch() } } } // 네트워크를 통해 받아오는 값이라고 가정. private func fetch() async -> Int { return 100 } } struct viewmodelTests { var sut: viewmodel! init() { sut = viewmodel() } @Test func testButtonTapped0() async throws { sut.dispatch(.buttonTapped) try await Task.sleep(for: .seconds(1)) #expect(sut.count == 100) } @Test func testButtonTapped1() async throws { sut.dispatch(.buttonTapped) await Task.megaYield() #expect(sut.count == 100) } @Test func testButtonTapped2() async throws { sut.dispatch(.buttonTapped) try await Task.yield() #expect(sut.count == 100) } @Test func testButtonTapped3() async throws { try await withMainSerialExecutor { sut.dispatch(.buttonTapped) try await Task.yield() #expect(sut.count == 100) } } @Test func testButtonTapped4() async throws { try await withMainSerialExecutor { sut.dispatch(.buttonTapped) try await Task.megaYield() #expect(sut.count == 100) } } }다음과 같은 viewmodel을 테스트하는 코드를 작성했을 때,0번째 테스트의 경우는 현재 testButtonTapped0가 실행되는 Task를 suspend했지만, dispatch 함수 내부의 Task는 suspend되지 않고 그대로 진행되기 때문에 정상적으로 작동을 할 것으로 예상을 했습니다.https://github.com/pointfreeco/swift-concurrency-extras1번째의 경우는 위 라이브러리를 사용해서 하나의 Task를 여러번 yield시켜주도록 해서 동작하도록 해서 거의 높은 확률로 작동을 했습니다.그런데 testButtonTapped2의 경우 yield를 해주더라도 남아있는 스레드가 존재해서 바로 다시 일을 진행을 해서 틀릴 때가 있는 걸까요???또한 5번째는 거의 항상 맞는 것이 보장되는데 3번째는 보장이 되지 않는 이유도 궁금합니다. 궁극적으로 궁금한 점은 현재 위 코드의 viewmodel의 dispatch함수를 테스트하기 위해서 어떠한 방법을 사용해야 항상 성공을 보장할 수 있을 지 궁금합니다. 또한 Task.yield()를 했을 때 어떤 Task를 yield하는지 정확하게 이해가 가지 않습니다.. 긴 글 읽어주셔서 감사합니다!
-
해결됨앨런 Swift Concurrency for Swift 6 (Part-1)
파트1 PDF 강의 자료 다운로드
파트1 PDF 강의 자료 다운로드 받고 싶은데, 어디서 받을 수 있는지 모르겠습니다.
-
해결됨앨런 Swift Concurrency for Swift 6 (Part-1)
Part 2에 대해서
안녕하세요! 좋은 강의 너무 잘 듣고 있습니다.2025년 1월 안으로 part 2 강의 제작을 마무리 하는게 목표라고 하셨던 것 같은데, 예상 일정대로 part 2도 업로드 될까요?actor와 sendable에 대해서 얼른 공부하고 싶어 기다리고 있습니다 ㅎㅎ답변 부탁드립니다!
-
해결됨앨런 Swift Concurrency for Swift 6 (Part-1)
강의자료 관련 질문
안녕하세요 엘런님 먼저 정말 좋은 강의 제작 해주셔서 감사합니다.현재 컨커런시 part1을 시작하려고 강의 구매 및 강의 자료를 다운받았는데요part2 역시 강의가 오픈되면 구매할 생각입니다.그런데 그 때는 part2 강의자료만 따로 제공되지는 않을까요??설명을 보니 묶어서 교제로 판매하신다고 하시는데 part2 강의 자료만 필요한데교제까지 구매하면 조금 부담이 될 것 같아사요