전체 글

CS

[Network] HTTP 1.1, 2.0

HTTP HyperText Transfer Protocol이라는 이름에서 알 수 있듯, protocol 즉 전송규약입니다. 이 규약을 통해서 ①누구를 위한 ②어떤 데이터를 주고받을지는 정하기 나름입니다. 일반적으로 웹 브라우저에 http:// 을 입력하기 때문에 HTTP는 웹 페이지를 로딩하기 위한 것이라고 생각할 수도 있지만, HTTP는 컴퓨터 시스템간 기계적 정보를 주고받는데 광범위하게 이용됩니다. 이것이 web API 입니다. 이때 응답으로 전송되는 것은 HTML 문서가 아닙니다.(HTML은 대개 사람을 위한 것입니다.) 컴퓨터 간 통신에서는 HTTP 응답 코드가 가장 중요하고 응답 코드에 따라 응답의 Body를 해석합니다. HTTP는 TCP 위에서 동작하는 Protocol입니다. 따라서 TCP가 ..

CS

[OS] C++의 Thread

이번 글에서는 C++의 Thread에 대해서 알아보겠습니다. C++의 Multi Threading 지원 C++은 User level thread가 아닌 OS의 Kernel level thread입니다. 따라서 C++ 상에서 thread를 만들면 OS가 제공하는 thread를 생성하게 됩니다. 헤더파일 #incldue C++ Thread 생성 class thread 객체를 생성하는 방식으로 새로운 코드 흐름인 Thread를 생성합니다. #include #include using namespace std; void f1() { cout

Tech

[Tech] Task Queue + Workers Pool

많은 현대 프로그래밍 프레임워크와 시스템들은 Task Queue와 Workers Pool을 기본적으로 구현하고 있습니다. 이들은 비동기적 작업 처리, 멀티스레딩, 분산 컴퓨팅과 같은 고급 기능을 효율적으로 관리하는 데 필수적인 요소들입니다. 이번 글에서는 이 Task Queue와 Workers Pool에 대해서 알아보도록 하겠습니다. Task Queue + Workers Pool을 활용한 서버의 구조 Task Queue와 Workers Pool을 도입한 서버의 구조입니다. Socket 단에서는 I/O Multiplexing을 한 후 메시지를 뽑아낸 다음 Task Queue에 넣고 바로 빠집니다. 이 Task Queue에 들어간 메시지들을 다른 스레드가 핸들러를 호출해 처리합니다. 이때 메시지들을 처리하는..

CS

[OS] Multi-processing, Multi-threading

Multi-Processing 앞에 글에서 Multi-tasking은 1개의 CPU만으로 여러 task를 동시에 실행하는 것 같은 환상을 줄 수 있다고 했습니다. 이를 "동시성(concurrency)"라고 했습니다. 2023.12.10 - [CS] - [OS] Multi-Programming, Multi-Tasking [OS] Multi-Programming, Multi-Tasking Multi Programming 과거에는 컴퓨터라는 것이 굉장히 특별한 용도로 사용이 돼서 하나의 프로그램만 실행할 수 있었습니다. 하지만 이 방식은 CPU가 노는 시간이 많았기 때문에 CPU 이용률을 높이기 위 sejineer.tistory.com 이때 2개 이상의 CPU를 사용하는 것을 Multi-Processing이라..

CS

[OS] Multi-Programming, Multi-Tasking

Multi Programming 과거에는 컴퓨터라는 것이 굉장히 특별한 용도로 사용이 돼서 하나의 프로그램만 실행할 수 있었습니다. 하지만 이 방식은 CPU가 노는 시간이 많았기 때문에 CPU 이용률을 높이기 위해서 Multi-programming이 제안되었습니다. 멀티프로그래밍은 프로그램을 여러 개 띄운다는 뜻입니다. CPU에는 하나의 프로그램만 실행되고 나머지 프로그램들은 대기열에서 관리합니다. 이 때문에 돌고 있던 프로그램이 대기해야 되는 경우 어떤 프로그램도 CPU를 사용하지 못하게 되어 CPU 이용률이 낮아집니다. 따라서, CPU 상의 프로그램이 잠시 멈춰야 될 때가 발생하면 해당 프로그램을 CPU에서 내리고 대기열 맨 뒤로 집어 넣습니다. 대기열 맨 앞의 프로그램을 꺼내서 CPU에 올리고 실행..

CS

[OS] CPU utilization, CPU load

프로그램을 작성하고 그 프로그램이 좋은 프로그램인지 아닌지를 보는 여러 기준이 있을 것입니다. CPU 관련해서는 CPU utilization, CPU load 이 두 가지 기준을 한번 생각해 보겠습니다. CPU Utilization utilization 특정 시점에 CPU 처리 용량(capacity) 대비 CPU가 얼마나 사용되고 있는지를 의미합니다. 의미 있는 작업만을 포함하는 것이 아니라, 의미 없이 busy waiting 하는 경우도 모두 계산됩니다. CPU utilization = 100% - "CPU idle 비율" 예: idle = 90% → utilization = 10% 전체 CPU 숫자(= core 숫자) 기준인지 CPU 1개 기준인지 구분해야 합니다. - Linux의 경우 CPU 1개 ..

CS

[Network] Socket Options, I/O Multiplexing과 Non-blocking I/O

목표 지금까지 다뤘던 TCP, UDP 서버는 동시에 여러 클라이언트를 처리할 수 없습니다. 이 글에서는 서버의 복수 동시접속 처리 방법을 알아보도록 하겠습니다. Socket Options 본론으로 가기 전에 Socket의 옵션을 변경할 수 있는 몇 가지 메서드들을 보고 가겠습니다. Socket의 옵션 확인 및 변경 int getsockopt(SOCKET s, int level, int optname, char * optval, int *optlen); int setsockopt(SOCKET s, int level, int optname, char * optval, int optlen); Socket library 구현은 socket의 동작 방식을 변경할 수 있는 옵션을 포함합니다. 위 함수는 이 옵션 값..

CS

[Network] TCP Socket Programming - 데이터 수신하기

목표 전 글에서는 TCP Server로 데이터 전송하기까지 다뤘습니다. 이번 글에서는 TCP Server로 데이터를 수신해 보는 실습을 해보겠습니다. TCP 데이터 수신하기 전 글에서 코드를 가져와서 recv() 코드를 추가해 보겠습니다. #include #include #include #include #include #include using namespace std; int main() { int s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (s < 0) { cerr

진세박
sejineer