・
수강평 5
・
평균평점 5.0
이번 강의는 멀티쓰레드라는 내용의 특성과 김영한님 특유의 "근본 원리와 이유를 쉽게 풀어서 설명"하는 방식이 잘 맞아 떨어져 다른 책으로 공부하면 직관적으로 와 닿지 않을 수 있는 내용을 제대로 이해할 수 있는 레전드 강의였다고 생각합니다. 덕분에 어려운 개념을 정말 쉽게 이해할 수 있었습니다. 추가로 궁금한 점이나 "이랬으면 더 좋았겠다"고 생각하는 점을 감히 말씀드리자면, 자바에서 "쓰레드"가 의미하는 바가 우리가 cpu를 고를 때 "쓰레드"가 의미하는 바와 어떻게 다른지가 앞부분에 추가되었으면 더 좋았겠다고 생각합니다. 저도 영한님처럼 게임을 좋아하여 하드웨어에 관심이 많은데 처음에 쓰레드가 "하이퍼쓰레딩"이나 "8코어 16쓰레드" 할때의 쓰레드인줄 알고 약간 혼동이 있었습니다 ㅎㅎㅎ 아마 컴퓨터를 좋아하는 많은 다른 수강생들도 비슷한 혼동을 겪지 않았나 싶습니다. 그리고 또 추가로 궁금한점이 있습니다. cpu코어마다 각각 별도의 캐시가 할당되기 때문에 나타나는 메모리 가시성 문제를 해결하기 위해 volatile이라는 키워드를 사용하고, volatile이 붙으면 변수의 값을 캐시가 아니라 메인메모리에 저장하기 때문에 값 조회가 느려진다고 하셨던 걸로 기억합니다. 그런데 L1, L2 캐시는 코어마다 독립적으로 존재하지만, L3 캐시는 모든 코어가 공유하기 때문에 굳이 메인 메모리에 값을 저장하지 않고 L3 캐시에 값을 저장하면 메모리 가시성 문제를 해결하면서도 값을 읽어들이는 속도 저하를 최소화시킬 수 있는데 왜 메인메모리에 값을 저장하는지가 궁금합니다. ChatGPT한테 물어봤는데 제가 지식이 부족하여 GPT의 답변을 이해할 수가 없어서요 ㅋㅋㅋㅋㅋㅋ 혹시 시간적으로 여유가 되신다면 대충 간단하게만 답글로 설명해주시면 감사하겠습니다!!
안녕하세요. Nexus님 열심히 들어주시고 또 피드백 남겨주셔서 감사합니다 :) 생각하신 것 처럼 실제로는 volatile 변수도 캐시를 사용하며, 내부적으로 가능한 많은 최적화를 수행합니다. volatile의 가장 중요한 핵심은 '모든 스레드가 항상 같은 값을 읽도록 보장한다'는 점입니다. 하드웨어 내부의 복잡한 동작 방식(예: 캐시 일관성 프로토콜)까지 깊게 파고드는 것은 이 키워드의 주된 사용 목적을 이해하는 핵심이 아닙니다. 따라서 보통 쓰레드 관점에서 이 내용을 설명할 때는 '모든 스레드에게 값이 즉시 보이도록 보장한다(visibility)'는 핵심 개념을 전달하기 위해, "메인 메모리에서 직접 읽고 쓴다"고 단순화하여 설명합니다. 감사합니다.







