Send하는부분 전체적인 로직 질문입니다.
314
작성한 질문수 14
Send함수 :
_pending이 true일 때 -> 지금 RegisterSend를 하고 있으니 등록하지 않고 대기열(큐) 에 넣어준다.
_pending이 false일 때 -> 지금 RegisterSend를 하고있지 않으니 RegisterSend를 실행한다.
동시에 Send를 실행할 수 있으니 lock을 걸어줘야 한다.
RegisterSend함수:
_pending을 true로 바꿔서 실행중이라는 것을 표시, 큐에서 버퍼 하나를 꺼내서 SendAsync를 비동기로 실행, 완료되면 OnSendCompleted를 호출한다.
Send에서 호출하는 경우와 OnSendCompleted 에서 호출하는 두 가지 경우가 있지만, Send에서는 _pending이 false일때 호출, OnSendCompleted에서는 _pending이 true일 때 호출하기 때문에 lock을 걸어주지 않아도 된다.
OnSendCompleted 함수:
RegisterSend을 하는 동안 큐에 쌓인 버퍼를 전부 처리하고 _pending을 false로 바꿔서 일을 끝냈다고 표시한다.
직접 호출과 콜백 두 가지 경로로 올 수 있기 때문에 lock을 걸어줘야한다.
대충 이렇게 이해했는데 이해한게 맞을까요..?
답변 1
2
안녕하세요
질문주신 부분은 잘 이해하셨습니다.
팁을 드리자면 [제대로 이해한 것이 맞는지] 확인하는 질문은 굳이 하실 필요가 없습니다.
어차피 모든 정답은 코드에 있고,
혹시라도 본인이 이해하신 것이 잘못됐다면,
언젠가 그 모순점을 깨닫게 되실텐데
그러면서 또 엄청 성장을 할 수 있습니다.
앞으로도 늘 남의 코드를 볼 일이 많을텐데
그 때는 정말 코드의 의도를 일일히 알려줄 사람이 없을테니
스스로 가정을 세우고, 그 가정에 맞게 분석하는 연습이 필요합니다.
C#에서의 RAII
0
66
3
TLS 질문드립니다.
0
79
2
SpinLock과 컨텍스트스위칭에 대해 질문 남겨요.
0
74
2
Unity Span
0
97
2
XML, Dll 차이점
0
134
2
Session 질문입니다
0
96
1
Write Read 커서 키워드
0
88
1
더미 클라이언트 수에 따른 OnDisconnect 발생
0
85
2
네트워크 Send 전담 스레드 배치
0
112
2
UnhandledException 으로 서버 터지는 경우
0
102
2
컨텐츠 단, 엔진 단
0
118
1
질문 있습니다
0
93
2
C# 게임서버 3D MMORPG
0
159
2
유니티6 버전
0
106
2
receive하는 부분과 send하는 부분의 차이
0
154
2
커서의 위치의 중요성
0
110
2
C++ 전혀 모르는데 C# 서버
0
176
2
강의에 질문이 있습니다
0
92
2
멀티스레드 이해도 질문
0
107
1
500 vs 500
0
147
3
OnAcceptHandler 액션 함수
0
70
1
이 정도 서버의 객관적인 수준이 궁금합니다.
0
204
2
36. Serialization #3 에서 string (name) 코드 수정 질문
0
86
2
외부 컴퓨터와의 통신 방법이 궁금합니다
0
112
1





