2014-04-19 69 views
1

我在實現NSRunLoop的能力中閒置/休眠其線程沒有激烈的CPU使用率的實現。 Objective-c如何實現? (YES){...}NSRunLoop執行

回答

3

一般來說,有很多系統調用會阻塞。也就是說,它們將導致內核暫停該線程並且不給它CPU時間,直到發生某些特定事件或狀態改變。比如像kevent()poll()select()read()在非純文件描述符等

關於NSRunLoop具體而言,它的建成周圍CFRunLoop,這是開源:https://www.opensource.apple.com/source/CF/CF-855.11/CFRunLoop.c。它在OS X和iOS上使用Mach API。特別是,它調用mach_msg()等待輸入源(以Mach端口的形式)觸發(接收消息)或定時器過去。

2

實質上,NSRunLoop是

事件驅動模式。我們使用pipe()來生成兩個fd(一個用於讀取,一個用於寫入)。我們可以通過在其他線程中寫入一些字節來「寫入」fd來喚醒線程(讀取「讀取」fd)的線程。

你可以參考這個項目的更多信息。

https://github.com/wuyunfeng/LightWeightRunLoop(使用BSD kqueue的實現的iOS RunLoop和一些Runloop相對基金會API諸如執行選擇器(或其他線程延遲一些次),定時器,URLConnection的等)

希望這可以幫你。