찾기 어려운 크로스 플랫폼 타이머 API: OS API 여정
2025-02-06
이 글에서는 C 프로그래밍에서 크로스 플랫폼 타이머 API의 과제를 탐구합니다. 저자는 Linux, FreeBSD, NetBSD 등 다양한 Unix 시스템이 타이머를 매우 다르게 처리한다는 것을 발견했습니다. 신호를 기반으로 하는 POSIX의 timer_create 함수는 다른 OS 프리미티브와의 상호 운용성 저하, 시그널 마스크 간섭 등 여러 문제점을 가지고 있습니다. 이 글에서는 timerfd_create, kqueue, port_create, io_uring 등 다양한 솔루션의 장단점을 자세히 살펴보고, 크로스 플랫폼 애플리케이션에서는 libuv가 하는 것처럼 사용자 공간에서 타이머를 구현하는 것이 더 효율적이고 안정적인 접근 방식이라는 결론을 내립니다. libuv는 타이머 관리에 최소 힙 데이터 구조를 사용하고, poll/epoll/kqueue 등의 시스템 콜을 다중화에 사용합니다.