전체 글
-
Go에서 채널(Channel)을 이용한 고루틴(Goroutine) 개수 제한Go 2025. 4. 3. 00:32
Go의 goroutine은 가벼운 스레드로, 다른 언어보다 손쉽게 동시성을 확보할 수 있게 한다. 하지만 무제한으로 생성하면 메모리 부족이나 시스템 리소스 과부하가 발생할 수 있기 때문에 goroutine의 개수를 제한하는 방법이 필요하다. 이번 글에서는 channel을 이용해 goroutine 개수를 제한하는 방법을 공유한다.package mainimport ( "fmt" "sync" "time")func main() { maxGoroutines := 10 // 동시에 실행할 최대 goroutine 개수 semaphore := make(chan struct{}, maxGoroutines) var wg sync.WaitGroup for i := 0; i 코드..
-
MSI-X 인터럽트는 어떻게 동작할까?운영체제 2025. 4. 1. 01:33
MSI-X는 PCIe 장치가 인터럽트를 발생시키는 고성능 인터럽트 방식으로, 기존의 레거시 인터럽트(IRQ) 및 MSI(Message Signaled Interrupts) 방식보다 더 유연하고 확장성이 뛰어나다.NVMe SSD나 NIC이 사용하는 인터럽트 방식이다. 개요MSI-X는 기존 인터럽트 방식의 단점을 해결하기 위해 설계되었다.레거시 인터럽트(IRQ)모든 장치가 인터럽트 라인을 공유하기 때문에 충돌할 수 있다.순차적으로 처리되기 때문에 인터럽트 처리 성능이 낮다.MSI(Message Signaled Interrupts)인터럽트를 메모리 쓰기 방식으로 전달하여 기존 레거시 인터럽트에 비해 성능이 뛰어나다.인터럽트 벡터 수가 제한적이다. (최대 32개)MSI-X기존 MSI에서 인터럽트 벡터를 204..
-
C++ 모듈 (Module, C++20)C++ 2025. 3. 25. 01:12
헤더 파일 방식의 문제점C++에서는 전통적으로 #include를 사용하여 헤더 파일을 포함하는 방식을 사용한다. 하지만 이 방식에는 여러 가지 문제가 있다. 1) 중복된 파싱 비용 (Compile-time Overhead)헤더 파일은 여러 번 포함될 수 있으며, 각 번역 단위(Translation Unit)마다 같은 헤더 파일이 반복적으로 파싱됨.프로젝트가 커질수록 빌드 시간이 기하급수적으로 증가함.2) 전처리기의 한계 (Preprocessor Limitations)#include는 단순한 텍스트 복사-붙여넣기 방식으로 동작함.#define, #ifdef 등의 전처리 매크로로 인해 의도하지 않은 코드 변화가 발생할 수 있음.네임스페이스와 달리 전역 네임스페이스 오염(Global Namespace Poll..
-
C++ 컴파일 과정C++ 2025. 3. 24. 15:49
#include "Vector.h"void Vector::someFunction() { // 구현 내용}add: mov eax, edi add eax, esi ret컴파일은 크게 네 단계로 분류된다. 전처리(Preprocessing) → 컴파일(Compiling) → 어셈블(Assembling) → 링크(Linking) 1. 전처리전처리기는 #include, #define, #ifdef 등의 전처리 지시문을 처리한다.#include #define PI 3.14int main() { std::cout 가령 이런 코드가 있을 때, #include 된 iostream 전체가 iostream 헤더 파일에 있는 내용으로 치환되고, 코드 내의 PI도 전부 3.14로 치환된다.// 헤더..
-
인터럽트(Interrupt) 동작 과정운영체제 2025. 3. 20. 21:50
1. 인터럽트란 무엇인가?인터럽트(interrupt)는 CPU가 기존에 처리하던 일을 잠시 멈추고 특정 이벤트를 처리하도록 하는 메커니즘이다.예를 들어, 우리가 키보드의 키를 누르면 키보드 버퍼에 값이 저장되고, 하드웨어 인터럽트가 발생한다. 이때 CPU는 현재 작업을 멈추고, 키보드 입력을 처리한 후 다시 원래 작업으로 복귀한다. 2. 인터럽트의 종류인터럽트는 크게 하드웨어 인터럽트와 소프트웨어 인터럽트로 나뉜다.하드웨어 인터럽트외부 장치에서 발생하는 인터럽트로, CPU가 직접 제어할 수 없는 이벤트를 처리한다. 예시: 키보드 입력, 마우스 클릭, 네트워크 패킷 수신, 타이머 이벤트 등② 소프트웨어 인터럽트프로그램 실행 중 발생하는 인터럽트로, 주로 운영체제와의 상호작용을 위해 사용된다.예시: 시스템 ..
-
시스템 콜(system call)의 동작 과정운영체제 2025. 3. 10. 00:25
1. 시스템 콜이란 무엇인가?기본적으로 사용자 어플리케이션은 컴퓨터의 자원에 직접 접근할 수 없다. 컴퓨터의 자원을 어떻게 쓸지에 대해서 관린해주는 것이 운영체제이고, 운영체제는 흔히 우리가 많이 사용하는 Windows, Mac OS, Linux 등이 있다. 시스템 콜이란,"사용자가 특정 자원 (CPU, 메모리, 디스크 등)에 직접 접근할 수 없기 때문에, 운영체제를 통해 대신 요청하는 것이다." 2. 시스템 콜의 종류시스템 콜은 크게 프로세스 관리, 파일 관리, 메모리 관리, 네트워크 통신 등 다양한 기능으로 분류할 수 있다. 종류시스템 콜설명1. 프로세스 관리 (Process Management)fork()새로운 프로세스를 생성 (부모-자식 프로세스)execve()실행 중인 프로세스를 새로운 프로그램..