@prefix schema: <https://schema.org/> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix ks: <https://comcomponent.com/vocab/> .

<https://comcomponent.com/blog/2026/03/16/006-windows-timer-vs-event-wait/#article>
    schema:about <https://comcomponent.com/knowledge/timer-polling/>, <https://comcomponent.com/knowledge/event-driven-wait/> ;
    schema:mentions <https://comcomponent.com/knowledge/system-clock-resolution/>, <https://comcomponent.com/knowledge/wait-functions/>, <https://comcomponent.com/knowledge/windows-event-object/>, <https://comcomponent.com/knowledge/waitonaddress/>, <https://comcomponent.com/knowledge/waitable-timer/>, <https://comcomponent.com/knowledge/timebeginperiod/>, <https://comcomponent.com/knowledge/getsystemtimeadjustment/>, <https://comcomponent.com/knowledge/interrupt-processing-delay/>, <https://comcomponent.com/knowledge/scheduler-latency/>, <https://comcomponent.com/knowledge/queue-arrival-wait/>, <https://comcomponent.com/knowledge/io-completion-wait/>, <https://comcomponent.com/knowledge/stop-request-wait/>, <https://comcomponent.com/knowledge/same-process-value-change-wait/>, <https://comcomponent.com/knowledge/time-based-wait/>, <https://comcomponent.com/knowledge/iocp/>, <https://comcomponent.com/knowledge/overlapped-io/>, <https://comcomponent.com/knowledge/data-race/> .

<https://comcomponent.com/knowledge/timer-polling/> a skos:Concept ;
    skos:prefLabel "timerポーリング(様子見ループ)"@ja ;
    skos:definition "一定時間ごとに起きて状態を確認する、Sleepや短いtimeout付きwaitを使った待機設計。"@ja ;
    skos:altLabel "timer polling" ;
    skos:altLabel "Sleep(1)ループ"@ja ;
    ks:requires <https://comcomponent.com/knowledge/system-clock-resolution/> ;
    ks:notRecommendedFor <https://comcomponent.com/knowledge/queue-arrival-wait/> ;
    ks:notRecommendedFor <https://comcomponent.com/knowledge/io-completion-wait/> ;
    ks:notRecommendedFor <https://comcomponent.com/knowledge/stop-request-wait/> ;
    ks:notRecommendedFor <https://comcomponent.com/knowledge/same-process-value-change-wait/> .

<https://comcomponent.com/knowledge/event-driven-wait/> a skos:Concept ;
    skos:prefLabel "イベント駆動の待機設計"@ja ;
    skos:definition "何かが起きた側がsignalし、待つ側はそのsignalを待つ待機設計。"@ja ;
    skos:altLabel "event wait" ;
    skos:altLabel "event-driven design" .

<https://comcomponent.com/knowledge/system-clock-resolution/> a skos:Concept ;
    skos:prefLabel "system clock resolution(platform timer resolution)"@ja ;
    skos:definition "OSが時刻を更新する間隔。timed waitのtimeout判定はこの粒度に引っ張られ、既定では15.6ミリ秒級になることが多い。"@ja ;
    skos:altLabel "システムクロックの分解能"@ja ;
    ks:verifiedBy <https://comcomponent.com/knowledge/getsystemtimeadjustment/> .

<https://comcomponent.com/knowledge/scheduler-latency/> a skos:Concept ;
    skos:prefLabel "スケジューリング遅延"@ja ;
    skos:definition "waitのtimeoutやsignalの条件が満たされてもスレッドはready状態になるだけで、即座にCPUをもらって実行される保証はないこと。"@ja ;
    skos:altLabel "scheduler latency" .

<https://comcomponent.com/knowledge/queue-arrival-wait/> a skos:Concept ;
    skos:prefLabel "キューへの仕事到着待ち"@ja ;
    skos:definition "producerがキューに仕事を投入するのを待つ、待機の対象の1類型。"@ja ;
    skos:altLabel "queue arrival wait" .

<https://comcomponent.com/knowledge/windows-event-object/> a skos:Concept ;
    skos:prefLabel "Windowsのイベントオブジェクト"@ja ;
    skos:definition "SetEventの呼び出しでsignaled状態になり、待機中のスレッドを起こせるWindowsの同期オブジェクト。"@ja ;
    skos:altLabel "Event Object" ;
    skos:altLabel "SetEvent" ;
    ks:recommendedFor <https://comcomponent.com/knowledge/queue-arrival-wait/> ;
    ks:recommendedFor <https://comcomponent.com/knowledge/stop-request-wait/> .

<https://comcomponent.com/knowledge/wait-functions/> a skos:Concept ;
    skos:prefLabel "Windowsの待機関数(Wait Functions)"@ja ;
    skos:definition "カーネルオブジェクトがsignalされるか、指定したtimeoutが経過するまで呼び出し元スレッドを待たせるWindowsのAPI群。"@ja ;
    skos:altLabel "WaitForSingleObject" ;
    skos:altLabel "WaitForMultipleObjects" ;
    ks:uses <https://comcomponent.com/knowledge/windows-event-object/> ;
    ks:recommendedFor <https://comcomponent.com/knowledge/stop-request-wait/> ;
    ks:uses <https://comcomponent.com/knowledge/waitable-timer/> .

<https://comcomponent.com/knowledge/overlapped-io/> a skos:Concept ;
    skos:prefLabel "Overlapped I/O"@ja ;
    skos:definition "FILE_FLAG_OVERLAPPEDを付けて開いたハンドルに対し、操作ごとのOVERLAPPED構造体を渡して行うWin32の非同期I/Oの具体的な実装形態。モードはハンドル単位でCreateFileの時点に決まる。"@ja ;
    skos:altLabel "オーバーラップドI/O"@ja ;
    skos:altLabel "非同期I/O(Win32)"@ja ;
    ks:recommendedFor <https://comcomponent.com/knowledge/io-completion-wait/> .

<https://comcomponent.com/knowledge/io-completion-wait/> a skos:Concept ;
    skos:prefLabel "I/O完了待ち"@ja ;
    skos:definition "発行した非同期I/Oが完了するのを待つ、待機の対象の1類型。"@ja ;
    skos:altLabel "I/O completion wait" .

<https://comcomponent.com/knowledge/iocp/> a skos:Concept ;
    skos:prefLabel "I/O完了ポート(IOCP)"@ja ;
    skos:definition "多数の非同期I/Oの完了通知を1つのFIFOキューに集約しつつ、実行可能なスレッド数をコンカレンシー値以下に保つスケジューリング機構を兼ねる、Windowsカーネルの仕組み。"@ja ;
    skos:altLabel "I/O Completion Port" ;
    skos:altLabel "IOCP" ;
    ks:recommendedFor <https://comcomponent.com/knowledge/io-completion-wait/> ;
    ks:uses <https://comcomponent.com/knowledge/overlapped-io/> .

<https://comcomponent.com/knowledge/stop-request-wait/> a skos:Concept ;
    skos:prefLabel "停止要求待ち"@ja ;
    skos:definition "スレッドやワーカーへの停止・キャンセル要求が来るのを待つ、待機の対象の1類型。"@ja ;
    skos:altLabel "stop event" ;
    skos:altLabel "cancellation" .

<https://comcomponent.com/knowledge/waitonaddress/> a skos:Concept ;
    skos:prefLabel "WaitOnAddress API"@ja ;
    skos:definition "同一プロセス内で、あるメモリ番地の値が変わるまで待つための同期API。Windows 8/Windows Server 2012以降で使える。"@ja ;
    skos:altLabel "WakeByAddressSingle" ;
    skos:altLabel "WakeByAddressAll" ;
    ks:recommendedFor <https://comcomponent.com/knowledge/same-process-value-change-wait/> .

<https://comcomponent.com/knowledge/same-process-value-change-wait/> a skos:Concept ;
    skos:prefLabel "同一プロセス内の値変化待ち"@ja ;
    skos:definition "同じプロセス内のメモリ上のある値が変化するのを待つ、待機の対象の1類型。"@ja .

<https://comcomponent.com/knowledge/data-race/> a skos:Concept ;
    skos:prefLabel "データ競合(data race)"@ja ;
    skos:definition "複数のタスクが同じメモリ位置に同時アクセスし、少なくとも一方が書き込みであるために結果が未定義になる状態である。"@ja ;
    skos:altLabel "Data Race" .

<https://comcomponent.com/knowledge/waitable-timer/> a skos:Concept ;
    skos:prefLabel "待機可能タイマー(waitable timer)"@ja ;
    skos:definition "指定時刻にsignaledになるカーネルオブジェクト。CREATE_WAITABLE_TIMER_HIGH_RESOLUTIONを付けると高精度版になり、Sleepより周期待ちの土台に向く。"@ja ;
    skos:altLabel "waitable timer" ;
    skos:altLabel "CreateWaitableTimerExW" ;
    ks:recommendedFor <https://comcomponent.com/knowledge/time-based-wait/> .

<https://comcomponent.com/knowledge/time-based-wait/> a skos:Concept ;
    skos:prefLabel "時刻そのものが条件の待ち"@ja ;
    skos:definition "5秒ごとにmetricsを送るなど、待ちたいものが出来事ではなく時刻・時間そのものである、待機の対象の1類型。"@ja ;
    skos:altLabel "time-based wait" .

<https://comcomponent.com/knowledge/timebeginperiod/> a skos:Concept ;
    skos:prefLabel "timeBeginPeriod(タイマー分解能要求)"@ja ;
    skos:definition "システムのタイマー分解能を引き上げるWin32関数。必要な間だけ呼び、終わったらtimeEndPeriodで戻す使い方が前提で、分解能を上げてもQPCの精度自体は上がらない。"@ja ;
    skos:altLabel "timeBeginPeriod" ;
    skos:altLabel "timeEndPeriod" ;
    ks:notRecommendedFor <https://comcomponent.com/knowledge/queue-arrival-wait/> .

<https://comcomponent.com/knowledge/getsystemtimeadjustment/> a skos:Concept ;
    skos:prefLabel "GetSystemTimeAdjustment"@ja ;
    skos:definition "systemがtime-of-day clockを更新する間隔(lpTimeIncrement)を100ナノ秒単位で取得できるWindows API。Sysinternals ClockResは内部でこれを呼ぶ。"@ja ;
    skos:altLabel "ClockRes(Sysinternals)" .

<https://comcomponent.com/knowledge/interrupt-processing-delay/> a skos:Concept ;
    skos:prefLabel "割り込み処理に伴う遅延要因(ISR/DPC)"@ja ;
    skos:definition "割り込み時に最優先で走るISRと、その続きとして積まれる優先度の高いDPCによる、待機スレッドの実行開始を遅らせる要因。"@ja ;
    skos:altLabel "ISR" ;
    skos:altLabel "DPC" ;
    skos:altLabel "Deferred Procedure Call" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/timer-polling/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/system-clock-resolution/> ;
    schema:description "timer waitのtimeout判定はsystem clock resolutionの粒度に依存し、指定したミリ秒どおりに正確に起きるとは限らない"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/api/synchapi/nf-synchapi-sleep> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/timer-polling/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/scheduler-latency/> ;
    schema:description "timeoutが過ぎてもthreadはready状態になるだけで、priorityやCPUのidle stateなどによって実行開始がさらに遅れることがある"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/sync/wait-functions> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/event-driven-wait/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/scheduler-latency/> ;
    schema:description "event waitでもsignalされた瞬間にゼロ遅延で実行が始まるわけではなく、scheduler latencyやthread priorityの影響を受けることがある"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/sync/wait-functions> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/timer-polling/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/queue-arrival-wait/> ;
    schema:description "Sleep(1)でキューをTryPopするような様子見ループは、キューへの仕事到着待ちには推奨されない"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/sync/event-objects> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/windows-event-object/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/queue-arrival-wait/> ;
    schema:description "producerがキューに仕事を入れた直後にSetEventし、consumerがイベントを待つ設計が、キュー到着待ちの推奨対応である"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/sync/event-objects> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/wait-functions/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/windows-event-object/> ;
    schema:description "WaitForSingleObjectやWaitForMultipleObjectsは、イベントオブジェクトなどのカーネルオブジェクトがsignalされるまで待つ"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/sync/wait-functions> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/overlapped-io/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/io-completion-wait/> ;
    schema:description "OVERLAPPED構造体を使う非同期I/Oのイベント通知は、I/O完了待ちの推奨対応の1つである"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/fileio/synchronous-and-asynchronous-i-o> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/iocp/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/io-completion-wait/> ;
    schema:description "多数の非同期I/Oの完了通知を1つのキューに集約するI/O完了ポートは、I/O完了待ちの推奨対応である"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/fileio/i-o-completion-ports> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/timer-polling/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/io-completion-wait/> ;
    schema:description "timerで状態を見に行く設計は、I/O完了待ちには推奨されない"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/sync/wait-functions> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/windows-event-object/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/stop-request-wait/> ;
    schema:description "stop eventをsignalする設計は、停止要求待ちの推奨対応である"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/sync/event-objects> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/timer-polling/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/stop-request-wait/> ;
    schema:description "100msごとにstop flagを見に行くポーリングは、停止要求待ちには推奨されない"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/sync/wait-functions> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/wait-functions/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/stop-request-wait/> ;
    schema:description "WaitForMultipleObjectsでstop eventとwork eventを1回のwaitでまとめて待つ設計が、停止要求を取りこぼさないための推奨対応である"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/api/synchapi/nf-synchapi-waitformultipleobjects> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/waitonaddress/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/same-process-value-change-wait/> ;
    schema:description "同一プロセス内である値が変わるまで待ちたいだけなら、カーネルオブジェクトの生成や管理が不要なWaitOnAddressが有力な選択肢になる"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/api/synchapi/nf-synchapi-waitonaddress> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/waitonaddress/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/data-race/> ;
    schema:description "WaitOnAddressで待つ変数を素の型のまま両スレッドから読み書きすると、C++ではデータ競合(未定義動作)になり、最適化ビルドでは更新が見えないまま止まり続けることがある"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/api/synchapi/nf-synchapi-wakebyaddresssingle> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/waitable-timer/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/time-based-wait/> ;
    schema:description "5秒ごとにmetricsを送るなど、待ちたいものが時刻そのものであるときは、Sleepを雑に積むよりwaitable timerを使ったほうが意味がはっきりする"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/api/synchapi/nf-synchapi-createwaitabletimerexw> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/timebeginperiod/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/queue-arrival-wait/> ;
    schema:description "短いtimer waitの精度をtimeBeginPeriod(1)で上げるのではなく、本当に待ちたいのが仕事の到着なら設計をevent駆動に変えるほうが遅延にもCPUにも電力にも素直である"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/api/timeapi/nf-timeapi-timebeginperiod> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/system-clock-resolution/> ;
    rdf:predicate ks:verifiedBy ;
    rdf:object <https://comcomponent.com/knowledge/getsystemtimeadjustment/> ;
    schema:description "手元の環境のsystem clock resolutionは、GetSystemTimeAdjustmentのlpTimeIncrement(100ナノ秒単位)を読むか、内部で同じAPIを呼ぶSysinternalsのClockResで確認できる"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/api/sysinfoapi/nf-sysinfoapi-getsystemtimeadjustment> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/interrupt-processing-delay/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/scheduler-latency/> ;
    schema:description "ISRとその続きとして積まれるDPCも、待機していたスレッドの実行開始をさらに遅らせる要因になる"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/api/synchapi/nf-synchapi-sleep> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/iocp/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/overlapped-io/> ;
    schema:description "I/O完了ポートは、OVERLAPPED構造体を使う非同期I/O(overlapped I/O)の完了通知を1つのFIFOキューに集約する"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/fileio/i-o-completion-ports> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/wait-functions/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/waitable-timer/> ;
    schema:description "Wait Functionsはイベントだけでなく、waitable timerなど複数種類のカーネルオブジェクトを待機対象にできる"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/sync/wait-functions> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/timer-polling/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/same-process-value-change-wait/> ;
    schema:description "while (flag == 0) Sleep(1)のような様子見ループは同一プロセス内の値変化待ちには推奨されず、代わりにWaitOnAddressが向く"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/api/synchapi/nf-synchapi-waitonaddress> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .
