C++/Win32

[Win32] IOCP Worker Thread 다중화

powergirl 2025. 12. 27. 19:05
Worker Thread 개수 권장 기준
SYSTEM_INFO si;
GetSystemInfo(&si);

int workerCount = si.dwNumberOfProcessors * 2;

 

 

Worker Thread 다중 생성
std::vector<HANDLE> g_workerThreads;

for (int i = 0; i < workerCount; i++)
{
    HANDLE hThread = CreateThread(
        NULL,
        0,
        WorkerThread,
        NULL,
        0,
        NULL
    );

    g_workerThreads.push_back(hThread);
}

 

 

종료용 Completion Packet 전송
for (int i = 0; i < workerCount; i++)
{
    PostQueuedCompletionStatus(
        g_hIOCP,
        0,
        IOCP_EXIT_KEY,
        NULL
    );
}

 

 

Worker Thread 종료 처리
DWORD WINAPI WorkerThread(LPVOID)
{
    while (true)
    {
        DWORD bytes;
        ULONG_PTR key;
        OVERLAPPED* ov;

        GetQueuedCompletionStatus(
            g_hIOCP,
            &bytes,
            &key,
            &ov,
            INFINITE
        );

        if (key == IOCP_EXIT_KEY)
        {
            break; // 정상 종료
        }

        ClientContext* ctx = (ClientContext*)key;

        if (bytes == 0)
        {
            closesocket(ctx->socket);
            delete ctx;
            continue;
        }

        // recv 처리...
    }

    return 0;
}