메시지 루프에서 메시지 처리 성능 비교: WinAPI vs MFC
안녕하세요.
WinAPI에서는 메시지가 많이 쌓이면 switch case문으로 처리하기 때문에 병목 현상이 생긴다고 말씀을 하셨는데요. 그러면 MFC에서는 메시지 맵으로 처리한다면 병목 현상이 확 줄어드나요? 성능 차이가 그렇게 심하게 나는지 궁금합니다.
回答 3
0
쉽게 생각해서 Event handler 시스템을 Lookup table로 만든다고 생각하시면 되겠습니다. 항상 그런 것은 아니지만 다수의 switch-case문은 Lookup table 구조로 변경 할 수 있습니다. 이렇게 하면 높은 성능향상을 기대 할 수 있고요. 더 자세한 정보는 Lookup table에 대해 찾아보시기 바랍니다. 참고하시기 바랍니다. 😄
(참, 독하게 시작하는 C, 독하게 시작하는 Java 강의에 Lookup table에 관한 내용이 들어 있습니다.)
0
아무리 그래도 병목 현상을 개선할 수가 있나요?
병목 현상이란 게 메시지 처리하는 함수에 따라서 처리 시간이 각기 다를테고.. 좀 느린 것도 있을텐데요. 그래서 메시지가 메시지 큐에 많이 쌓여서 병목 현상이 발생하는 거잖아요?
이걸 메시지 맵으로 변경한다고 병목 현상을 해결할 수 있다는 게 잘 이해가 안 가네요.
0
메시지 큐는 선형 자료구조이며 큐를 중심으로 병목 현상이 나는 것은 구조적인 부분입니다. 개선의 여지도 별로 없고요. 큐에 데이터가 쌓이는 것은 메시지 처리 지연 때문에 발생할 수 있습니다. 그 문제와 질문의 내용은 별개로 봐야 하겠습니다. 다시 말씀드리지만 Lookup table에 대해 알아보시기 바랍니다.
0
병목 현상이 나는 것은 구조적인 부분이고 개선의 여지도 없는 건데, 강의에서는 병목 현상을 언급하고 MFC로 개선할 수 있다고 말씀하셔서 오해의 여지가 있다고 생각합니다.
switch case문이 컴파일 타임에 최적화가 일어나면 메시지 맵보다 더 성능적으로 이점을 얻을 수도 있을 것 같긴한데 여기에 대해서는 어떻게 생각하시는지 궁금합니다.
0
switch-case는 컴파일러 최적화가 불가능한 구조입니다. case가 늘어날 수록 마지막에 기술한 case는 여러 번 비교 연산을 수행한 다음에 확인되기 때문입니다. 다시 말씀드리지만 Lookup table 구조에 대해서 알아 보시기 바랍니다. 😄
0
AI 답변을 원하지 않습니다.
강사님께서 WinAPI 병목 현상을 개선해서 나오는 게 MFC라고 말씀하셨는데요. 메시지맵을 언급하면서요. 어떻게 병목 현상을 개선했는지에 대해서 설명이 없습니다. 설명좀 부탁드립니다.
0
안녕하세요, 인프런 AI 인턴입니다. 이성원님.
메시지 루프에서 메시지 처리 성능에 대한 문의를 주셨군요. WinAPI와 MFC 간의 메시지 처리 방법에 대해 조금 더 자세히 설명드리겠습니다.
WinAPI에서는 메시지를 처리할 때 주로 switch case 문을 사용합니다. 이 방법은 코드가 간단하지만, 많은 메시지를 처리해야 할 경우 코드가 복잡해질 수 있습니다. 이 과정에서 병목 현상이 발생할 가능성도 존재합니다. 그러나 성능상의 차이보다는 코드의 복잡도와 유지보수 측면에서의 문제라고 볼 수 있습니다.
MFC에서는 메시지 맵을 통해 메시지를 처리합니다. 메시지 맵은 각 메시지를 해당 메시지를 처리하는 함수와 연결해주는 역할을 하며, 코드가 깔끔하게 작성될 수 있고, 확장성이나 유지보수 측면에서 유리합니다. 하지만, MFC의 메시지 맵도 결국은 내부적으로는 비슷한 방법으로 메시지를 분배하기 때문에, 성능 차이가 매우 크다고 보기는 어렵습니다.
즉, 성능보다는 코드 구조와 가독성, 유지보수성 측면에서의 차이가 더 크다고 볼 수 있습니다. MFC를 사용하면 메시지 처리 코드가 좀 더 간결하고 명확해질 수 있습니다.
다음 자료들이 도움이 되실 수 있습니다:
- MFC의 메시지 맵 이해하기: MFC 메시지 맵의 동작 방식에 대한 자세한 설명
- WinAPI와 MFC의 메시지 처리 비교: 두 기술에서의 차이점 설명
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
Reticle이 안나옵니다.
0
7
1
진행 방법 질문드립니다!
0
26
2
Singleton 관련 질문입니다.
1
28
2
2-I) 왜 이 문제가 그래프이론 카테고리에 있는지 잘 모르겠습니다.
0
54
2
AddGameFrameworkComponentReceiver vs AddExtensionHandler
0
24
0
scanf("%d\n") 의미
0
20
1
2주차 개념#12 트리 순회
0
25
2
책과 강의 질문
0
156
2
MFC로 게임 엔진 제작 질문
0
175
2
이벤트 메시지 루프의 '응답 없음'에 대하여
0
136
2
그려진 도형 선택(Z-order 변경)부분[9분59초경]
0
92
2
메모리 창을 어떡해 뛰우나요?
0
164
3
안녕하세요 선생님
0
114
1
토글메뉴(강사도 삽질) 10:30 질문 / pch.h 전역변수 선언 에러
0
171
2
CMainFrame과 CCreateDemoView와의 관계 (교과서 p80 그림3-3)
1
109
1
커스텀 드로우에 대해서도 다루나요?
0
187
2
MainFrame 에서 LButtonDown 이벤트 처리 질문
0
166
1
윈도우 프로그래밍 UI 관련 질문입니다
0
230
2
유튜브 강의와 차이점
0
316
1
책 질문입니다.
0
283
2
mfc 내부에서 콜백 함수 구현 방법
0
391
1
수강기간 무제한인지 문의드립니다!
1
453
1
pOldPen = dc.SelectObject(); 관련 질문
0
267
1
라디오 버튼 그룹에 대해서 질문합니다.
0
302
1

