본문 바로가기
반응형

프로그래밍507

IOCP에 대해서 IOCP(I/O Completion Port)란 무엇인가?소켓이나 파일의 입출력을 최소한의 스레드를 사용해서 처리하는 기법이다. 이를 위한 스레드 풀링이나 비동기 처리등을 운영체제에서 관리해주기 때문에 사용자는 IOCP를 이용해서 쉽고 빠르게 고성능의 입출력 처리가 가능해진다. 추가적으로 설명하자면, 중첩 입출력(Overlapped I/O)이 완료되면 사용자에게 이를 통지해 주는 커널 오브젝트이다. IOCP는 비동기(Asynchronous) + 스레드 풀링(Thread Pooling) + 논 블로킹(Non-Blocking) + 중첩 입출력(Overlapped I/O)과 같은 개념들을 이용해서 작동한다. IOCP의 장점스레드 풀(Thread Pool)을 쉽게 사용할 수 있다. (운영체제가 직접 스레드 풀링.. 2024. 1. 24.
C# 변수 캡처(Capture)에 대해서 람다 변수 캡처(Capture) 람다를 다루다 보면 변수를 캡처하는 상황을 맞이하게 될 것이다. using System; using System.Collections.Generic; class Program { static void Main(string[] args) { List actions = new List(); for (int i = 0; i Console.WriteLine(i)); } foreach (var a in actions) { a.Invoke(); } // 기대하던 출력: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 // 실제 출력: 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 } } 위의 코드를 작.. 2024. 1. 23.
C# 퀵 정렬(Quick Sort)에 대해서 퀵 정렬이란? 이름부터 퀵 정렬이기 때문에 빠르다. 그렇다면 퀵 정렬은 어떤 정렬인가? '찰스 앤토니 리처드 호어(Charles Antony Richard Hoare)'가 개발한 정렬 알고리즘 분할 정복(divide and conquer) 방법 분할, 정복, 결합의 과정으로 진행 불안정 정렬, 비교 정렬 분할 정복 알고리즘에 속하며 평균적으로 매우 빠른 수행 속도를 자랑한다. 퀵 정렬 수행과정 배열의 첫 번째 값을 피벗(pivot)으로 설정한다. low는 left + 1 자리부터 피벗과 비교해서 작으면 한 칸씩 증가한다. high는 right 자리에서부터 피벗과 비교해서 크면 한 칸씩 감소한다. low와 high가 결정되면 서로 스왑한다. 위의 절차를 반복한다. low와 high가 교차하면 정지한다. 피.. 2024. 1. 23.
숫자 10은 허상이다 숫자 10의 고유성은 없다고 생각하자 숫자를 나타내는 digit이라는 영어 단어는 라틴어 digitus에서 유래된 단어이다. 라틴어 digitus는 "손가락 또는 발가락"을 의미한다. 옛 시절부터 손가락, 발가락을 이용해서 숫자를 셋을 것이다. 분명하다. 십진수(decimal, 라틴어로 10을 의미) 만일 인간이 만화의 등장인물들처럼 손에 손가락이 네 개씩밖에 없었다면 어떻게 되었을까? 아마 10에 기반을 둔 수체계를 만들 생각은 절대 하지 못했을 것이다. 그 대신 8에 기반을 둔 수체계를 사용하는 것이 훨씬 더 합리적이라는 점에는 별다른 논란의 여지가 없을 것이다. 이런 숫자 체계를 8에 기반을 둔 수체계 혹은 팔진수라 이야기 한다. 우리가 십진수 체계에서 수를 셀 때는 0,1,2,3,4,5,6,7,8.. 2024. 1. 22.
[백준 BAEKJOON] 17215번 볼링 점수 계산 문제 소현이는 친구들과 함께 볼링을 치러 볼링장에 갔다. 그런데 볼링장의 시스템 오류로 인해 점수판에 점수가 집계 되지 않는 문제가 있었다. 밖이 너무 추운 나머지 소현이와 친구들은 그냥 치기로 하였고 1게임이 끝났지만 각자 점수가 얼마나 되는지를 계산하지 못하고 있다. 소현이와 친구들을 위해 볼링 점수를 계산해주는 프로그램을 작성해 보자. 볼링 규칙 1게임은 총 10프레임으로 구성되어 있다. 각 프레임마다 볼링핀 10개를 세워두고 공으로 쓰러뜨리는 것이며 기본적으로 볼링핀 1개당 1점이다. 각 프레임마다 2번의 기회가 주어지며 첫 번째 기회에 10개의 핀을 모두 쓰러뜨리는 것을 스트라이크(S)라고 한다. 두 번째 기회까지 사용하여 10개의 핀을 쓰러뜨리는 것을 스페어(P)라고 한다. 스트라이크를 치면 .. 2024. 1. 22.
C# 볼링 점수 계산기(Bowling Score Calculator) 볼링 점수 계산 생각보다 볼링 점수 계산기를 코드로 짜보려니 예상치 못한 문제들이 많았다. 스트라이크 이후에 공 2개의 점수를 보너스로 받는다. 스페어 이후에 공 1개의 점수를 보너스로 받는다. 10 프레임에서 달성한 스트라이크, 스페어에 대해서는 보너스를 받지 못한다. 10 프레임에서 스트라이크, 스페어를 달성하면 1번 더 공을 던질 수 있다. 볼링 점수 계산 사이트 Bowling Score Calculator THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PA.. 2024. 1. 19.