iOS/Macで提供しているタイマー精度のことはじめ

Mac OS XやiOSのフレームワークで提供しているタイマーには幾つかの種類がありますが、それぞれの精度の違いはどれくらいあるのだろう、という点が気になって調査していました。 そんな折、「3秒だけCFRunLoopのソースを読んだんだけど」と splhack 氏が色々とアドバイスをくれました。 ちなみに、タイマー調査のためのアプリは、以下の場所で現在作成中です。 続きを読む
17
>ω< @u_akihiro

めも。iOSのNSTimerの精度の高さは、最初ビビったw @gnue: .@hkato193 さんの「iOS/Macで提供しているタイマー精度のことはじめ」をお気に入りにしました。 http://togetter.com/li/66009

2010-11-05 10:08:02
Hirohito Kato ⌘ @hkato193

@splhack そういえば、NSTimerとDispatch Sourceの2つは、ときおり「指定時間よりも僅かに前」という時間で発火していましたよ。離散透けジューリングのしきい値が垣間見えた一瞬でした。

2010-11-05 10:08:54
sakamoto.kazuki @splhack

によればxnu(OS X, iOSのMach由来kernel)は、soft realtimeなsystem。priority 127で相当にrealtime。userlandから使えないでしょうけども。default 31。79とか指定できるのかな? マウスカーソルに影響でそう。

2010-11-05 10:09:31
sakamoto.kazuki @splhack

@hkato193 それってCLOCK_MONOTONICとCLOCK_REALTIMEの違いではないでしょうか? MachのtimerとDispatch Source TIMERのkeventはREALTIMEで、mach_absolute_timeはMONOTONICとか。

2010-11-05 10:21:24
Hirohito Kato ⌘ @hkato193

@splhack その視点はなかったです。現在時刻を取得しようとするときに誤差が生じる、という理解で合ってます?

2010-11-05 10:24:06
Hirohito Kato ⌘ @hkato193

@splhack まさにそのサイトに載っていた経過時間の計算処理を使ってますです。 mach_absolute_difference()

2010-11-05 10:29:00
sakamoto.kazuki @splhack

@hkato193 確信はないですが、NSTimerとかで待ってる間にsystem time変更すると、NSTimerはそれに追従して起きるのか、それとも追従しないでsystem time変更しなかったとした時間まで寝てるのか。

2010-11-05 10:29:40
sakamoto.kazuki @splhack

@hkato193 仕様的には、そのthreadをsuspendしないといけないような気がしますので、busy loopは使わないんじゃないかなーと思ったりします。

2010-11-05 10:44:05
Hirohito Kato ⌘ @hkato193

@splhack Linux(というかglibcかuclibc)における実装で、あれーyieldしないんだけれど?ということがあってソース見たら愕然とした記憶が。記憶違いかもしれませんですが。確かに仕様ではSuspendですよね。

2010-11-05 10:46:02
Hirohito Kato ⌘ @hkato193

確かに。タイマーの「発火」も良い言葉がほしかったり。 RT @32nm: なんで日本語には、データ、に相当する語が無いんだろうか。

2010-11-05 10:48:32