묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
강의에서 말씀하신게 어느 강의에 있는지 궁금합니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]스레드 풀 로그 관련 얘기하셨는데스프링 강의에서 엑츄에이터.그라파나 얘기를 한적 있다고 하는데 어느 강의에서 어느 부분인가요?
-
해결됨앨런 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를 쓰면 순환 참조가 생길 가능성 자체도 없는 것인지도 궁금합니다. 감사합니다 😊
-
해결됨재고시스템으로 알아보는 동시성이슈 해결방법
왜 클래스 이름에 Facade 가 붙나요?
안녕하세요 좋은 강의 감사드립니다! service -> ropository 를 참조하니 Facade 인데 왜 NamedLockStockFacade , OptimisticLockStockFacade 에 클래스 이름에만 Facade 를 붙이나요?? 현업에서는 어떤 상황에 Facade 를 붙여서 사용하나요?
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
멀티 코어에서의 CAS
안녕하세요 강사님 🙂 너무너무 잘 듣고 있습니다.좀 바보같은 질문일 수도 있는데, CPU 가 하드웨어적으로 다른 스레드의 접근을 막고 한 연산 안에서 "값 확인, 값 변경" 을 진행한다고 이해했습니다. 혹시 멀티코어에서 더라도 별다른 문제가 발생하진 않나요?가령 두 하드웨어가 연산을 따로따로 하며 서로를 인식하고 있지 않으니까, 동시에 "한 연산"을 수행해서, "값 확인 및 변경" 역시 정확히 동시에 진행된다면 충돌이 나지 않을까? 싶은 생각이 들었습니다. 제가 잘 못찾은건지 질문이 말도 안되는건진 모르겠지만 찾아봐도 잘 나오질 않아서, 질문을 드려보게 되었습니다 ㅠ
-
미해결자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
13:00 강의 내용 이해 질문
즉, 메인스레드가 하나의 스레드가 아닌 여러개 스레드 각 스레드마다 조인을 걸 수 있겠죠. 조인을 겁니다. 각스레드의 작업이 끝나게될때까지 메인 스레드는 계속 대기하게되겠죠 각 스레드가 작업이 종료되면 그 때 메인 스레드는 대기에서 빠져나오지만 나머지 스레드가 다시 모든 작업이 종료될 때 까지는 대기해야되겠죠?라고 하시면서 실행을 재개하는 흐름을 반복한다. 라는 4번 내용을 읽었습니다. 즉, 저 설명 내용이 각 스레드가 join 이 걸려서 join 이 걸린 스레드들이 작업이 종료되면 그 때 메인스레드는 대기 즉, wait 상태에서 나오고 runnable 상태가 되는거라고 이해했습니다.그런데 다음 설명에서스레드는 대기에서 빠져나오지만 나머지 스레드가 다시 모든 작업이 종료될 때 까지는 대기해야되겠죠? 라는 설명이 이해가 잘 안가는데요각 스레드가 종료됨에따라 메인스레드가 대기에서 빠져 runnable 상태가 되지만... 나머지 스레가 다시 모든 작업이 종료될때까지 대기????? ...이미 메인을 제외한 모든 스레드들이 작업이 끝났는데 어떻게 또 종료될때까지 대기하는거죠? 이전 강의에서 한번 사용한 스레드는 재사용이 불가능하다고 하셨습니다
-
해결됨재고시스템으로 알아보는 동시성이슈 해결방법
@Transactional 으로 인한 동시성 문제 발생 원인이 궁금합니다.
안녕하세요 좋은 강의 감사드립니다!강의를 보던중 StockService 에 있는 decrease 메서드에 @Transactional 을 걸어주면 왜 동시성 문제가 해결이 안되는지 궁금합니다. 결국 @Transactional 을 걸어주면 AOP 객체가 생성되고 그 객체가 가지고 있는 모니터락을 사용해 그 객체에 한번에 하나의 스레드만 접근 가능한거 아닌가요~? 왜 동시성 제어가 안되는지 궁금합니다.
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
키워드 synchronized와 어노테이션 synchronized
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.강의에서는 키워드 synchronized를 메서드 앞부분에 붙여 동기화를 구현하는데, 롬복의 @Synchronized 다른 점이 무엇인지 궁금합니다. 그리고 실무에서는 둘 중 어느 방법을 사용하는지도 궁금합니다!
-
해결됨김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
synchronized vs ReentrantLock vs Atomic 너무 혼란스럽습니다..
synchronized, ReentrantLock, Atomic 모두 상호배제(동기화)를 구현하지만, 락을 "획득하고 해제하는 과정" 자체도 동시 접근이 발생할 수 있는 또 다른 임계영역처럼 보입니다.→ 그렇다면 이 락 자체 또한 어떻게 동기화하는지 궁금합니다.핵심적으로,synchronizedJVM이 모니터 락을 통해 상호배제를 구현하는데 내부적으로CAS 연산 + OS의 스레드 대기 관련 시스템 콜 + JVM 내부 스레드 대기 큐 을 활용 상호배제를 구현한다.즉, 락 획득과 해제 과정의 동기화는 JVM 수준에서 구현한 것이다. OS는 단지 스레드를 잠재우고 깨우는 역할만 담당→ 이 이해가 맞는지?ReentrantLock자바에서 명시적으로CAS 연산 + OS의 스레드 대기 관련 시스템 콜 + 스레드 대기 큐을 활용하여 상호배제를 구현한다.즉, 락 획득과 해제 과정의 동기화는 자바 코드 수준에서 직접 구현한 것이다. OS는 단지 스레드를 잠재우고 깨우는 역할만 담당→ 이 이해가 맞는지?Atomic자바에서 명시적으로CAS 연산 활용하여 상호배제를 구현한다.즉, 락이 없고, 시스템콜도 없다. CAS 한 줄이 동기화의 전부→ 이 이해가 맞는지?
-
해결됨김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
우아한 종료 방식은 왜 라이브러리에 공식적으로 추가하지 않았을까요? ㅎㅎ
학습적으로 필요한 질문은 아니긴 하지만.. 100% 궁금해서 질문 드리는데요! 필요한 대부분의 기능을 미리 만들어서 제공하는 라이브러리에서학습 중 직접 작성한 shutdownAndAwaitTermination 메서드 같은건 왜 공식적으로 만들어 제공하지 않은걸까요?좀 충격? 적인건 라이브러리에 구현방법을 주석까지 남겨가며 제안했다는 건데요... 저걸 왜 그냥 메서드로 만들어두지않고 제안만 한걸까요?구조적인 문제가 생기는걸까요?너무 궁금하네요...ㅋㅋ
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
@modifying 이용한 동시성 제어
강의를 들은 뒤 동시성 제어를 위해 이것저것 알아보는 중 @Modifying을 이용하여 제어하는 방법이 있다는 것을 알았습니다. 언제 락을 걸어야 하고, 언제 어노테이션을 이용해야 하나요?
-
미해결파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI, async, await)
강의상의 readme와 배포되어 있는 것이 다른 것 같아요
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.스크린샷이 안되서 안타깝긴 한데 강의상의 inflearn-teaching-backend-drf가 어디있을까요?
-
해결됨김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
멀티스레드의 예외 처리
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.위 예제에서 main() 메서드가 InterruptedException을 던져버렸는데, 프로그램이 오류 로그를 띄우지 않고 정상 결과를 출력합니다. 왜 프로그램이 다운되지 않는지 궁금합니다. 원래 main() 메서드 밖으로 오류가 나가면 프로그램이 다운되니 무조건 main() 메서드 선에서 모든 오류를 처리해야 하는 것 아니었나요? 이 runnable을 상속 받을 스레드는 run() 메서드로 런타임 오류를 생성해 밖으로 던져버립니다. 그럼 그 스레드를 호출한 외부 스레드인 main() 스레드로 런타임 오류가 전달되어야 하는 것 아닌가요? 만약 main() 스레드로 가지 않는다면 한 스레드에서 던진 오류는 대체 어디로 가나요? 어디에서 무엇이 그 오류를 처리하는 건가요?
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
데몬스레드 파트 첫 번째 예제
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 정적 중첩 클래스에서 스레드를 정의한 후 main() 메서드에서 해당 스레드를 생성한 후 종료하는 예제입니다. 그런데 이 스레드의 run() 메서드를 보면 catch에서 런타임 오류를 생성한 후에 던집니다. 1. 발생한 오류는 체크 오류인데 굳이 런타임 오류를 새로 생성해서 던진 까닭은 단순히 InterruptedException 발생을 강조해서 알리기 위함인가요? (오류 로그를 남기듯이 오류 발생 흔적 남기기?) 2. run() 메서드에서 런타임 오류를 생성해서 던졌고 main() 메서드에는 이에 대한 별도의 오류 처리 과정이 없습니다. 그런데 왜 메인 메서드가 터지지 않고 정상 결과를 출력할 수 있는 건가요? 오류 처리 코드가 없으면 런타임 오류는 자동 던지기 처리돼서 메인 메서드 밖으로 오류 나가버리고 프로그램 다운돼야 하는 상황 아닌가요...?
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
인터럽트, 체크 예외 catch 재질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. AI의 답변을 받았으나, 여전히 이해가 가지 않아 재질문 올립니다ㅠㅠ 이 예제에서 Thread.sleep(3000);으로 인한 InterruptedException e를 catch한 후에 왜 log("sleep() end");~log("end");가 마저 출력되는지 잘 모르겠습니다. 예외가 발생하면 try 코드 본문을 빠져나가 catch로 이동하면서 try의 나머지 코드는 출력 안 되지 않나요? 예외를 잡으면 정상 흐름을 반환한다고는 하지만, 다시 실행되는 정상 흐름에 나머지 try 코드는 포함이 안 된다고 알고 있습니다...ㅠ 혹시 제게 오개념이 생겼나 싶어서 Java-Mid1의 오류 처리 파트를 다시 총 복습하고 와도 여전히 이해가 가지 않습니다. 답변 감사드립니다...ㅠ ps. 혹시 몰라서 제 의문을 가중시킨 Java-Mid1 강의의 예제 코드를 추가합니다. 아래의 예제에서는 send()에서 오류 발생 시에 try{}를 빠져나가서 disconnect();가 호출이 안 된다고 합니다ㅠ
-
미해결자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
강의 출시 질문 있습니다.
우선 좋은 강의 만들어 주셔서 정말 감사드립니다 :)얼마전에 스프링 MVC 관련 강의를 출시 해주셨는데요. 구입하고 한번 내용 확인해보니 앞으로 강의 출시 FLOW 를 설명 해주신 내용이 있었습니다. 동시성 파트 부분인 '리엑티브 프로그래밍' -> 'WebFlux' 강의 도 있는데요. 다음 강의 출시 할때 이 부분 부터 강의 출시 해주시는 건지 알고 싶습니다. (사실 '동시성 프로그래밍' 강의 이후 '리엑티브 프로그래밍' -> 'WebFlux' 강의를 손꼽아 기다리고 있었거든요 ㅠ,ㅠ)
-
해결됨김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
인터럽트, 체크예외 catch 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]멀티스레드와 동시성 강의-스레드 생명주기 파트에서 질문 드립니다.Thread.sleep(3000)으로 InterruptedException이 발생했고, catch로 그걸 잡았는데 왜 sleep()으로 다시 돌아가서 다음 로그가 출력되는 등 정상 흐름이 마저 진행되나요? 체크 예외가 발생하면 그걸 catch로 잡더라도 이후 코드는 마저 실행되지 않아 finally 코드가 도입된 것이 아니었나요? java-mid1에서 체크 예외가 발생해 나머지 코드가 실행되지 않아 자원 정리가 안 되었던 예제를 배웠던 것 같은데, 이 예제와 무슨 차이가 있어서 다른 결과가 나오는지 궁금합니다ㅠㅠ 2. 이 예제에서 InterruptedException이 발생해서 그걸 catch한 것까지는 이해됩니다. 그런데 왜 굳이 새 RuntimeException을 생성해서 또 던지는 건가요? InterruptedException 이외에 추가로 발생할 지도 모르는 다른 예외들도 한꺼번에 잡아서 던지려는 의도인가요(예방 차원)? 3. 예외를 어떤 경우에 잡고 어떤 경우에 던져야 하는지 궁금합니다. java-mid1 예외 처리 파트에서 예외를 못 잡으면 던지고 잡을 수 있으면 잡아야 한다고 배웠는데, 그 구체적인 기준을 잘 모르겠습니다. 그걸 배울 당시에는 '아직 기초 단계라 기본 개념만 잡고 자세한 오류 해결 과정은 나중에 나오나 보다'하고 넘겼는데, 이 예제에서도 그냥 catch(발생한 오류) 정도로 넘어가는 걸 보니 제가 뭔가 놓치고 있는 것 같습니다. 그냥 catch()코드를 넣으면 오류를 잡았다고 자바 상에서 처리가 되는 건가요? 그런 거면 그냥 오류를 다 catch로 잡아버리면 될 것 같은데, 굳어 던져야 하는 상황은 어떤 상황인가요...? 질문이 너무 길어졌네요. 친절한 답변에 미리 감사드립니다!!!
-
미해결운영체제 공룡책 강의
컨텍스트 스위칭과 PCB
안녕하세요! 먼저 좋은 강의를 제공해주셔서 너무 감사합니다. 다름이 아니라 강의를 듣다가 궁금한점이 들어서 글을 남기게 되었습니다. 운영체제운영체제는 프로세스를 관리하며, 컨텍스트 스위칭 시 프로세스마다 할당된 PCB 자료구조를 확인하여 CPU의 레지스터에 상태(Context)를 설정한다는 것으로 이해하였습니다! 컨텍스트 스위칭그렇다면, 프로세스 A, 프로세스 B가 메모리에 로드되어 있는 상태에서 프로세스 A가 실행되다가 할당된 CPU Time 을 다 소비하게 된다면 CPU Interrupt 가 발생되어, A의 PCB에 현재까지의 context를 저장하게 될 것이라고 추측하고 있습니다.그렇다면, 프로세스 A에서 프로세스 B로 컨텍스트 스위칭이 되는 것이 아니라 프로세스 A에서 운영체제로 컨텍스트 스위칭이 되고, 운영체제가 프로세스 A의 PCB 작업을 처리한 후에 프로세스 B로 다시 컨텍스트 스위칭이 되는 것이 맞을까요?? 추가로, 운영체제 또한 자료구조이며 PCB 자료구조는 동적으로 생성 및 삭제가 되는 것으로 생각이 되는데 운영체제 역시 하나의 프로세스로 간주하여 운영체제의 동적 메모리 영역인 힙 영역에 PCB가 생성 및 제거 되는 것일까요??
-
미해결운영체제 공룡책 강의
퀴즈 답지
안녕하세요 강의 잘 듣고 있습니다!혹시 퀴즈 답지는 어디서 볼 수 있을까요?
-
해결됨앨런 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로 찍어 실험을 해봤을 땐, 모두 동일한 스레드에서 실행되는 걸로 보입니다)