목록분류 전체보기 (370)
나만의 작은 도서관
주의사항: 해당 글은 일기와 같은 기록용으로, 다듬지 않은 날것 그대로인 글입니다. 응답 시간(response time)과 처리량(throuthput)은 다르다.서버 최적화를 하다 보면 응답 시간과 처리량을 고려하게 되는데, 비슷한 부분이 많아서 그런지 이 둘을 혼용해서 사용하는 경우가 있는 것 같다. 오늘은 각각의 개념과 예시를 알아볼 겸 정리해 보기로 했다. 처리량과 응답 시간이란?처리량은 단위 시간당 처리한 데이터의 양을 의미한다.응답 시간은 작업 요청 후 결과가 반환되기까지 걸리는 시간을 의미한다. 처리량 증가 = 응답 시간의 감소?처리량이 증가하면 응답 시간이 증가 “할 수” 있다. 처리량이 높을수록, 각 요청에 대한 처리가 다른 요청에 밀리는 경우가 줄어들기 때문이다.따라서, CPU가 구려 전..
주의사항: 해당 글은 일기와 같은 기록용으로, 다듬지 않은 날것 그대로인 글입니다. IOCP의 워커 스레드는 왜 코어 개수보다 많은 스레드를 만드는가?CPU bound 한 작업을 하는 스레드를 코어 개수보다 많이 만들게 되면 동시성만 늘어나고 병렬성을 증가하지 않기 때문에 context switching 비용만 잔뜩 늘어나 성능이 떨어진다. 그런데 왜 IOCP의 워커 스레드들은 코어 개수의 1.5~2배의 스레드를 만들까?그 이유는 이상적인 상황이 항상 유지되지 않기 때문이다. 실제로 운영체제는 아주 많은 프로그램들을 동시에 실행하고 있고, CPU 스케쥴링 정책을 통해 각 프로그램에게 실행 시간을 부여하는데, 이런 부분들 때문에 실제 코어 개수보다 조금 더 많이 스레드를 생성하는 것이 좋다.IOCP에서 워..
주의사항: 해당 글은 일기와 같은 기록용으로, 다듬지 않은 날것 그대로인 글입니다. 웹서버와 게임서버는 다르다.게임서버를 공부하다 보면 자료가 부족해서 웹서버 자료를 통해 이해해야 하는 경우가 많다. 그런데, 웹서버 지식을 이해하다면 약간씩 게임서버에 안 맞는 경우가 종종 발생한다. 오늘은 이에 대해서 알아보고, 어떠한 구조적 차이가 있는지 이해해 보기로 했다. 웹서버와 게임서버의 특징들(웹서버) 웹서버의 특징 1. 많은 수의 짧은 연결요즘에는 이것저것 많은 기술들이 붙은 웹서버이지만, 전통적인 웹서버 구조에서 통신은 https에 req-res 방식의 독립적이고 수동적인 통신을 한다. 그렇기에 각 요청에 대해 오랜 시간 연결되어 있지 않으며, 보통 수백 m s 이내에 연결이 끊긴다. 웹서버의 특징 2. ..

주의사항: 해당 글은 일기와 같은 기록용으로, 다듬지 않은 날것 그대로인 글입니다. CPU의 코어가 8개라면 병렬적으로 실행될 수 있는 작업은 최대 8개이다.(논리적 프로세서 개념은 제외) 하지만 이것이 프로세스의 작업이 최대 8개의 작업만이 동시에 진행될 수 있다는 것을 의미하지는 않는다.I/O bound 작업의 경우, CPU를 활용해야 하는 작업량이 그리 많지 않다. 이때, 최대 스레드 개수를 코어 수에 맞춰 프로세스를 실행했다면 어떻게 될까?ex1) I/O bound 작업이 많은 프로세스에서 코어 개수만큼 스레드를 생성했을 때I/O bound 작업이 많은 프로세스에서 코어 개수만큼 스레드를 생성했을 경우, 각 스레드는 각 코어를 하나씩 점유하여 실행될 수 있다. 처음 요청을 받았을 때 실행하는 CP..

주의사항: 해당 글은 일기와 같은 기록용으로, 다듬지 않은 날것 그대로인 글입니다. 작업에 따라 스레드는 항상 CPU를 열심히 사용하지 않을 수 있다.스레드가 CPU 점유권을 얻었다고 해서 time slice가 끝날 때까지 열심히 CPU에서 연산을 할 것이라 보장할 수 없다. 중간중간에 멀리 있는 메모리 데이터(ex. 메인 메모리, 원격 메모리)를 가져오는 I/O 작업을 하거나, 시스템콜을 하면 코드 진행이 블로킹(Blockin)되고, 블로킹되어 있는 동안 CPU를 활용하지 않기 때문이다.그래서 CPU 스케쥴러는 스레드가 배정된 time slice 동안 계속해서 CPU를 사용하지 않는 순간들을 알뜰하게 활용하기 위해 블로킹된 스레드를 CPU에서 내리고, 다른 스레드를 점유시키게 한다.즉, 스레드가 맡은 ..
주의사항: 해당 글은 일기와 같은 기록용으로, 다듬지 않은 날것 그대로인 글입니다. 컨텍스트 스위칭(context switching)이란?코어에서 실행 중이던 스레드가 다른 스레드로 교체되는 상황을 의미컨텍스트(context)란?스레드의 상태를 의미, CPU나 메모리 등등…CPU에는 레지스터가 있음.컨텍스트 스위칭은 왜 필요한가?하나의 코어에서 여러 프로세스 또는 여러 스레드를 실행시키기 위해서다. 컨텍스트 스위칭을 하지 않는다면, 기존에 실행되던 컨텍스트만 실행되기 때문에 코어의 개수 이상의 프로세스를 실행할 수 없게 된다.컨텍스트 스위칭은 언제 발생하는가?다양한 상황에서 발생한다. 배정받은 time slice를 초과했거나, CPU를 사용하지 않는 작업인 I/O 작업이나 다른 리소스를 가져오거나, 파일..