일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 3d
- URP
- ColorGradingLutPass
- ASW(Application SpaceWarp)
- 가상 바이트
- OculusMotionVectorPass
- Virtual Byte
- 개인 바이트
- 프로그래밍 기초
- Windows Build
- C언어
- 벡터
- Three(Two) Tone Shading
- Toon Shader
- Cartoon Rendering
- VR
- Specular
- URP로 변경
- 작업 집합
- Cell Look
- Rim Light
- 게임 수학
- Cell Shader
- working set
- Private Bytes
- AppSW
- 메모리 누수
- Today
- Total
WinCNT
동기화 방법들 본문
네트워크 프로그래밍
연결 여부 --> TCP
데이터 송수신 --> TCP/UDP
1. 비동기식 --> OS가 APP에게 전달함
어떻게?
Windows OS의 특성을 이용 --> WM 메시지로 알려줌
조금 더 범용적인 방식: 이벤트 방식
Windows OS의 Event 커널 객체 --> 소켓 신호를 이벤트로 받겠다
(Linux에서도 비슷한 방식이 존재함)
Windows OS 성능의 극대화: IOCP + 오버랩드 I/O
오버랩드 I/O라는 구조체를 이용해서 CP(Complete Port)로 주고 받음
(CP 이외에도 콜백이나 이벤트로도 받을 수는 있다 - 옛날 방식)
2. 동기식 --> APP가 계속 기다림
동기화 방법들
https://docs.microsoft.com/en-us/windows/win32/sync/using-synchronization
WaitForMultipleObjects
메인 스레드든 워커 스레드든 있기만 하면 동기화가 걸린다
DWORD WaitForMultipleObjects(
[in] DWORD nCount,
[in] const HANDLE *lpHandles,
[in] BOOL bWaitAll,
[in] DWORD dwMilliseconds
);
bWaitAll은 시느널이 모두 OK냐, 하나라도 OK냐로 결정하는 것
이벤트가 2개일 경우의 이벤트 처리
switch (dwEvent)
{
// ghEvents[0] was signaled
case WAIT_OBJECT_0 + 0:
// TODO: Perform tasks required by this event
printf("First event was signaled.\n");
break;
// ghEvents[1] was signaled
case WAIT_OBJECT_0 + 1:
// TODO: Perform tasks required by this event
printf("Second event was signaled.\n");
break;
case WAIT_TIMEOUT:
printf("Wait timed out.\n");
break;
// Return value is invalid.
default:
printf("Wait error: %d\n", GetLastError());
ExitProcess(0);
}
Event Objects
Mutex Objects
생성 자체가 하나의 객체
SetEvent 등에는 없다
하지만 뮤텍스는 스레드 동기화에서는 잘 안 쓴다
Semaphore Objects
Mutext와 비슷하지만 Count로 관리한다
Singly Linked Lists
좋아는 보인다
단, Interlocked 계열의 함수를 사용하므로 메모리 정렬을 잘 해야 한다
()aligned_malloc / _aligned_free 등)
Timer Queues
타이머를 만들기 귀찮으니 사용하는 것도 좋을지도...?
병렬 컨테이너 및 개체(Parallel Containers and Objects)
https://docs.microsoft.com/ko-kr/cpp/parallel/concrt/parallel-containers-and-objects?view=msvc-170
동시성, 병렬성?
동시성 - 작업을 나눠서 돌아가면서 수행, 마지막에 합쳐주는 처리가 필요
병렬성 - 하드웨어의 지원을 전제로, 물리적으로 동시에 작업을 수행
TBB
스레딩 빌딩 블록(Threading Building Blocks, TBB)
다중 코어 프로세서의 이점을 취하는 소프트웨어 프로그램을 작성할 목적으로
인텔이 개발한 C++ 템플릿 라이브러리(병렬 프로그래밍을 위한 구성 요소들의 집합)
유저 레벨 (크리티컬 섹션)
Critical Section Objects - Win32 apps | Microsoft Docs
mutex Class (C++ Standard Library) | Microsoft Docs
<mutex> | Microsoft Docs
위의 3개 모두 다르다...
SSS
'게임 프로그래밍(학습 내용 정리) > 시스템 프로그래밍' 카테고리의 다른 글
작업 집합(Working Set), 가상 바이트(Virtual Byte), 개인 바이트(Private Bytes)...그리고 메모리 누수 (0) | 2022.05.16 |
---|---|
메모리 (0) | 2022.05.16 |
유저 모드에서의 스레드 동기화 (0) | 2022.03.29 |
윈도우OS의 시간 측정 함수 조사 (0) | 2022.03.28 |
스레드 스케줄링 (0) | 2022.03.28 |