소개
게시글
질문&답변
Serial queue가 한개의 스레드를 사용한다는 내용에 질문이 있습니다
오호,, 저는 개인적으로 이론적으로 깊게 파고드는걸 좋아해서 오늘 말씀 주신 내용이 다 흥미롭네여 ( o̴̶̷᷅ᴗo̴̶̷᷄ ) 물론 앨런님이 처음 시리얼 큐를 설명할 때 "하나의 스레드"를 사용하는 큐가 아닌, 여러개의 스레드 객체를 사용할 수 있되 Task는 "한번에 하나씩" 처리하는 큐라고 했으면 개념이 명확히 잡히지 않았을 것 같긴 합니다. (네,,,,,,,,머라구요,,????🤔 하면서 강의를 들었겠죠,,??) 하지만 시리얼 큐에 대한 이해를 한차례 하고 나서 실제로 OS 단에서는 어떻게 돌아간다! 는 사실을 접하니 개념과 실제 동작을 알게 된 것 같아 좋네용 오늘도 감사합니다~!
- 3
- 5
- 519
질문&답변
Serial queue가 한개의 스레드를 사용한다는 내용에 질문이 있습니다
상세한 답변 감사합니다. 결국 MainThread를 제외한 나머지 스레드 객체는 사용할 때만 잠깐 생성되었다가 사라짐. 즉, 시리얼 큐라도 중간에 사용하는 스레드 객체가 변경될 수 있음. 하지만 시리얼 큐는 하나의 스레드 객체를 사용하는 것처럼 설명을 하는 것이 이해에 훨씬 직관적이기 때문에 그렇게 설명해 주신것. 이 되겠네욤 답변 주신 것을 읽고, 원래 처음에 링크 주신 답변을 한번 더 읽어봤는데 이때 말씀 중 두가지 헷갈리는 부분이 있습니다. 1. 위의 링크를 붙여주신 것과 같이 실제로는 한번에 하나의 쓰레드를 사용하는 것이 맞습니다. 그게 실제로는 하드웨어적인 여러개의 쓰레드 일수도 있겠지요. -> 여기서 하드웨어적인 여러개의 쓰레드를 언급해주신 것은, “소프트웨어적인 여러개의 스레드를 쓸 수 있는 것은 당연하고, 해당 스레들이 심지어 다른 물리 스레드에 속하는 애들일 수도 있다”의 의미를 담고 있는건가요? 2. 앱을 실행할때 특정하는 메인쓰레드조차도, 어쩌면 하드웨어적으로 여러쓰레드를 사용할지도 모릅니다. 하지만, 아무도 메인쓰레드가 한번에 하나의 쓰레드를 사용하는 개념이라고 생각하지 않지요..) -> 제가 드린 질문의 답변에서는 “메인 쓰레드 객체는 실제로 객체 자체가 절대로 변하지가 않습니다. (동일한 메모리 주소를 가진 인스턴스라는 것이지요.)” 라고 말씀주셨는데, 저 글의 답변에서는 메인 스레드 객체마저 변할 수 있는 것으로 해석됩니다. 혹시 메인스레드조차 하드웨어적으로 여러 스레드를 사용할 수 있다는 의미가 어떤 뜻인지 조금 더 설명 부탁드려도 될까요?
- 3
- 5
- 519
질문&답변
우선순위 뒤바뀜 질문 드립니다
안녕하세요 앨런님! (아니 도대체 인프런은 글씨 크기를 어떻게 키우는걸까요..🤔) 물리 스레드라고 설명주신 개념이 생소해서 조금 공부해봤더니, 제가 생각한건 “1 코어 = 1 물리스레드” 이라고 가정하고 질문 드린거였네요. 그래서 저는 싱글 코어에서는 여러 논리스레드가 할당될 때 무조건 멈춤 현상이 발생하고, 멀티 코어에서는 동일 코어에 여러 논리 스레드가 할당될때 멈춤 현상이 발생한다고 생각했어요. 하지만 하이퍼스레딩 개념이 등장함에 따라 하나의 코어에 여러 개의 물리 스레드가 존재할 수 있게 되었고, 따라서 우선 순위에 밀려 task 가 멈출 수 있는 상황을 ‘여러개의 논리 스레드가 동일한 코어에 몰려있는가’로 판단하는 것보다, ‘동일한 물리 스레드에 몰려있는가’로 판단하는 것이 더 정확하겠군요. 조만간 강의 내용도 업데이트 된다니 그 내용도 기대하고 있겠습니다! 감사합니다 :)
- 1
- 2
- 192
질문&답변
DispatchWorkItem의 qos 관련해 질문 있습니다.
아하 네넵 우선은 제 이해력의 한계로...! 애플에서는 unspecified 로 설정 되어 있다.. 정도로만 가져가야겠네요 🤔 나중에 unspecified 일때 default를 따라가는 경우도 있다..? 정도의 비슷한 내용을 보게 되면 그때 다시 설명주신 내용 참고해보도록 하겠습니다 답변 감사합니다!! :)
- 1
- 5
- 238
질문&답변
DispatchWorkItem의 qos 관련해 질문 있습니다.
뭔가 unspecified 는 공식 문서에 나와있는 설명도 그렇고.. 다른 글들을 살펴봐도 명확하지 않은거 같아요ㅜㅜ 그렇다면 앨런님이 설명주신 "qos 가 global 을 따라간다"는 의미는, (사실 global 이라는 qos 는 없기 때문에) global dispatchQueue 의 기본 qos 인 default를 따라간다는 말씀이실까요..? (쓰고 보니 뭔가 더 잘못 이해하고 있는거 같네요..? )
- 1
- 5
- 238
질문&답변
Concurrency-Better 프로젝트 내 로직 관련 질문 드립니다.
아하 cell이 재사용되기 때문에 생기는 문제겠군요,,! cell A가 "a"라는 url 을 전달받고 이미지를 로드하고 있는 와중에, 사용자가 스크롤을 하면 cell A 가 다시 재사용되고 새로운 url이 indexPath를 통해 전달 될테니까요! 이는 기존에 요청했던 네트워크 요청을 했던 "a" url 과 일치하지 않는 상황이기때문에 return 시켜주는 거군요.. (맞..겠죠? ㅎ) 답변 감사합니다~!
- 1
- 3
- 183
질문&답변
Dispatch Group 개념 중 "wait 을 통한 동기적인 기다림"에 대한 질문입니다.
오호.. 디스패치 그룹의 wait()을 쓰는 경우는 꽤 복잡한 경우군요 🤔 ! 우선은 개념만 좀 더 정확히 다지고, "시리얼큐와 Sync, 객체설계시 주의할점"에서 한번 더 유의해서 봐야겠네요 👀 오늘도 자세하고 알기 쉽게 설명주셔서 감사합니다! 앨런님도 새해복 많이 받으셔요~ 감사합니다. :)
- 2
- 3
- 235
질문&답변
5강의 2번째 유의 사항 (현재의 큐에서 현재의 큐로 동기적으로 보내면 안됨) 관련 질문입니다.
아하 자세한 설명 감사합니다 ㅎㅎ 저는 하나가 이해 안되면 다른 것도 이해가 안돼서 그때 그때 파고 들어 공부하곤 하는데, 앞으론 조언 주신대로 질문은 메모 해놨다가 쭉 한번 듣고 크게 이해해보려고 노력하겠습니다! ㅎㅎ 조언 감사해요!
- 1
- 6
- 265
질문&답변
5강의 2번째 유의 사항 (현재의 큐에서 현재의 큐로 동기적으로 보내면 안됨) 관련 질문입니다.
오 자세한 설명 감사합니다! DispatchQueue.global() 로 다른 gloabl 큐 객체를 각각 생성해주는걸로 이해했어요.. 근데 같은 객체를 지칭하는거였나 보군요,,🤔🤔 그럼 DispatchQueue.global().async { DispatchQueue.global().sync } 에서 큐가 서로 같은 객체일때 DispatchQueue.global(qos: .utility).async { DispatchQueue.global().sync } 의 큐는 각각 다른 객체인가요 같은 객체인가요? (즉 QOS에 따라 객체가 달라지는건지...???)
- 1
- 6
- 265
질문&답변
4강 관련 질문있습니다!
오 자세한 설명 감사합니다!! 많은 부분에 도움이 되었어요! 3번 설명주신 부분이 좀 헷갈려서 다시 댓글을 달았었는데 쓰다보니까 내용이 정리가 되어서 삭제했습니다 ㅎㅎ 만약 아래와 같은 코드가 있다면, let queue = DispatchQueue.global(qos: .background) queue.async(qos: .utility) {} queue.async {} 우선 .background queue의 품질이 .utility로 올라간 상태에서, 첫번째 async에서 들어온 task가 다른 스레드로 모두 할당될때까지 queue의 품질은 utility로 유지 되겠네요. 두번째 async에서 들어온 task는 어차피 같은 queue를 쓰기 때문에 선입선출의 특성상 먼저 다른 스레드에 할당될 순 없을테고.. 첫번째 task 할당이 끝나자마자 queue의 qos는 다시 background로 바뀌고 두번째 task는 background에 맞는 스레드를 할당받게 되는 거겠죠?
- 1
- 3
- 194