멀티스레드에 대한 효율성에 관해서 질문이 있습니다!
251
작성한 질문수 16
멀티스레드를 사용할 경우
하나의 프로그램에서 생성해준 스레드 수만큼 CPU 코어를 할당받는 것으로 알고있습니다.
만약 프로그램에서 스레드를 3개를 사용하고 있다면 동시 다발적으로 3개의 코어를 할당받을 수도 있고 하나씩 순차적으로 할당받을 수도 있겠지요...
멀티스레드에 대해 학습하면서 느낀점이 결국 멀티스레드를 사용하면 실행 흐름을 단정지을 수 없다라고 느껴지는데요.
먼저 스레드를 할당받은 함수가 먼저 끝난다는 보장도 할 수 없으니까요...
그러니까 결국 실행흐름이 보장되지 않는 상황에서 여러 개의 스레드가 공유자원에 동시에 접근해서 수정하는 행위를 막아야 되는 것이라고 생각하고 있습니다.
그렇다면 일반적으로는 하나의 스레드가 공유자원에 접근해서 수정하고 수정된 값을 사용하는 것까지를 원자성으로 보장해야 될테고 원자성을 보장하기 위해 Lock을 사용하는데 단일 스레드의 효과가 나와버리는 거 아닌지요 ?
멀티스레드는 공유자원을 최대한 사용하지 않는 곳에 사용을 해야 되는건지요?
답변 1
5
그렇다면 일반적으로는 하나의 스레드가 공유자원에 접근해서 수정하고 수정된 값을 사용하는 것까지를 원자성으로 보장해야 될테고 원자성을 보장하기 위해 Lock을 사용하는데 단일 스레드의 효과가 나와버리는 거 아닌지요 ?
-> 네. 매우 예리한 부분을 캐치하셨네요.
멀티쓰레드라 하더라도 Lock을 남발하면
싱글쓰레드보다 못한 성능이 나오게 됩니다.
멀티스레드는 공유자원을 최대한 사용하지 않는 곳에 사용을 해야 되는건지요?
-> 대체적으로 맞지만 공유 자원을 사용하지 않을 수는 또 없습니다.
관련해서는 강의 후반부에 JobQueue에 대한 얘기를 하면서 나오게 됩니다.
TLS 질문드립니다.
0
35
2
SpinLock과 컨텍스트스위칭에 대해 질문 남겨요.
0
39
2
Unity Span
0
66
2
XML, Dll 차이점
0
99
2
Session 질문입니다
0
74
1
Write Read 커서 키워드
0
69
1
더미 클라이언트 수에 따른 OnDisconnect 발생
0
65
2
네트워크 Send 전담 스레드 배치
0
94
2
UnhandledException 으로 서버 터지는 경우
0
82
2
컨텐츠 단, 엔진 단
0
100
1
질문 있습니다
0
73
2
C# 게임서버 3D MMORPG
0
141
2
유니티6 버전
0
94
2
receive하는 부분과 send하는 부분의 차이
0
128
2
커서의 위치의 중요성
0
99
2
C++ 전혀 모르는데 C# 서버
0
164
2
강의에 질문이 있습니다
0
83
2
멀티스레드 이해도 질문
0
90
1
500 vs 500
0
122
3
OnAcceptHandler 액션 함수
0
57
1
이 정도 서버의 객관적인 수준이 궁금합니다.
0
185
2
36. Serialization #3 에서 string (name) 코드 수정 질문
0
78
2
외부 컴퓨터와의 통신 방법이 궁금합니다
0
100
1
스핀락 질문.
0
104
2





