見つかりにくいクロスプラットフォームタイマー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などのシステムコールを多重化に使用します。