분류 전체보기 92

no.1541 잃어버린 괄호

#include #include #include #include #include using namespace std;int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); string s; cin >> s; vector num; vector op; for (int i = 0; i  문제분석 모든 연산자를 음수로 그룹화하여 그리디 방식으로 해결하면 되는 문제이다 즉 처음으로 - 가등장한 이후의 모든 수들을 빼기로 처리하면 식의 최솟값을 구할 수 있다  for (int i = 0; i  문자열을 처음부터 흝으며 + 나 - 를 만나면 op에 연산자를 저장하고 숫자는 while문으로 이어붙여 정수 n을 만든지 num에 저장한다이렇게 하면 num에 모든숫자, o..

IOCP 예제로 살펴보는 서버 설계

Windows 환경에서 IOCP(I/O Completion Port)를 사용해 서버를 만들면, 대규모 동시 연결을 효율적으로 처리할 수 있습니다. 아래 예제는 파일이 아닌 소켓(네트워크)에 IOCP를 적용한 코드 구조입니다. 각 단계별로 “어떻게 IOCP와 스레드 풀이 연동해 클라이언트 요청을 처리”하는지 살펴보겠습니다.1. 핵심 자료구조와 전역 변수typedef struct _USERSESSION{ SOCKET hSocket; char buffer[8192]; //8KB 버퍼} USERSESSION;// 스레드 개수(워크 스레드 수)#define MAX_THREAD_CNT 4CRITICAL_SECTION g_cs; // 스레드 동기화std::list g_listClient; /..

IOCP 모델과 가상 메모리 관리: 운영체제가 어떻게 고성능 네트워크 I/O를 가능하게 할까?

TCP 서버를 작성할 때, IOCP(I/O Completion Port)라는 용어를 흔히 접하게 됩니다. IOCP는 대규모 동시 연결(수천~수만 소켓)을 효율적으로 처리하기 위해 윈도우 운영체제가 제공하는 고성능 비동기 I/O 모델인데요, 이 글에서는 IOCP가 가상 메모리(Virtual Memory)와 결합하여 어떻게 고성능을 달성하는지 살펴보겠습니다.  1. IOCP의 기본 개념IOCP(Completion Port)윈도우 커널 레벨에서 네트워크/파일 I/O 완료 시점을 통지하는 메커니즘이자 큐(Queue)입니다.소켓(혹은 파일 핸들)을 IOCP에 등록해두면, 해당 핸들에 대한 I/O가 비동기로 진행되고, I/O 완료 시 IOCP 큐에 “완료 알림 패킷”이 쌓입니다.스레드 풀애플리케이션은 IOCP에 연..

왜 IOCP는 빠를까? 운영체제가 직접 관리하는 비동기 I/O의 힘

네트워크 프로그래밍이나 대규모 파일 I/O를 해본 적이 있다면, “IOCP(I/O Completion Port)가 빠르다”는 말을 자주 들어보셨을 겁니다. 왜일까요? 이 글에서는 IOCP의 내부 동작과, 운영체제가 어떻게 I/O를 효율적으로 관리해서 애플리케이션 성능을 극대화하는지 살펴보겠습니다. 1. IOCP가 무엇인가요?IOCP는 윈도우 운영체제에서 비동기(Overlapped) I/O의 완료를 통지받기 위한 고성능 메커니즘입니다.Completion Port라는 특수한 큐(Queue)에 I/O 완료 정보가 쌓이고,대기 중인 스레드가 큐에서 꺼내 후속 처리를 하는 구조입니다.간단하게 비유하면, 택배 물류센터에서 택배(=I/O 작업)가 도착할 때마다 “작업 끝났다!”고 외치지 않고, 물류센터(=IOCP 큐..

no.1931 회의실 배정

#include #include #include #include #include using namespace std;int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int N; cin >> N; vector> v(N); for (int i = 0; i > v[i].second >> v[i].first; } sort(v.begin(), v.end()); int cnt = 1; int end = v[0].first; for (int i = 1; i = end) { cnt++; end = v[i].first; } } cout  문제분석회의가 겹치지 않도록 최대한 많은 회의를 배정하는 문제이다.즉 회의들을 정렬한 후, 회의를 살펴보면서 회의의 시..

APC(Asynchronous Procedure Call) 알아보기

1. APC(Asynchronous Procedure Call)란?APC는 윈도우 운영체제에서 특정 스레드에게 나중에 실행되도록 예약하는 콜백 함수를 의미합니다.비동기 I/O가 완료되었을 때, 혹은 QueueUserAPC 호출 등을 통해 “이 함수를 이 스레드에서 실행해 달라”는 요구를 큐에 넣고, 스레드가 Alertable Wait 상태로 들어갈 때 즉시 함수가 실행됩니다.즉, APC는 “스레드 문맥(Context)에서 실행되는 콜백 함수”라고 정리할 수 있습니다. 2. APC 작동 구조APC Queue스레드마다 독립된 APC 큐가 존재.하나의 스레드가 여러 개의 APC를 등록할 수 있음.APC 등록예: QueueUserAPC(&MyApcFunction, hThread, dwParam);I/O 완료 시..

Windows 비동기 I/O의 두가지 방식, 이벤트와 콜백

1. 이벤트 기반(Overlapped + Event)1.1 동작 개요Overlapped 구조체에 hEvent 필드를 이벤트 객체(CreateEvent로 생성)로 설정.WriteFile / ReadFile 같은 함수를 Overlapped 모드(마지막 인수로 Overlapped 구조체 전달)로 호출.함수는 비동기로 I/O를 시작하고, 즉시 복귀(에러는 ERROR_IO_PENDING일 가능성).I/O가 완료되면, Windows가 Overlapped 구조체에 지정된 이벤트 객체를 SET 상태로 바꿈.애플리케이션은 WaitForSingleObject(hEvent, ...) 또는 WaitForMultipleObjects(...)를 통해 이벤트가 세트될 때까지 대기 → 반환하면 I/O 완료.1.2 특징대기 함수(Wa..

콜백 기반 비동기 파일 I/O: 내부 동작 상세

#include "stdafx.h"#include ///////////////////////////////////////////////////////////////////////////파일 쓰기가 완료되면 역호출되는 함수.void CALLBACK FileIoComplete( DWORD dwError, //에러코드 DWORD dwTransfered, //입/출력이 완료된 데이터 크기 LPOVERLAPPED pOl) //OVERLAPPED 구조체{ printf("FileIoComplete() Callback - [%d 바이트] 쓰기완료 - %s\n", dwTransfered, (char*)pOl->hEvent); //hEvent 멤버를 포인터로 전용했으므로 가리키는 대상 메모리 해제한다. //이 메모리는..