我在實現NSRunLoop的能力中閒置/休眠其線程沒有激烈的CPU使用率的實現。 Objective-c如何實現? (YES){...}NSRunLoop執行
1
A
回答
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的等)
希望這可以幫你。
相關問題
- 1. [UIApplication sendEvent:]是否在NSRunLoop中執行?
- 2. CFRunLoopRun()與[NSRunLoop運行]
- 3. 如何將選擇器或塊發送到NSRunLoop來執行?
- 4. IOBluetooth事件代表只執行在不需要的NSRunLoop中
- 5. 在NSRunLoop
- 6. 具有在怪異崩潰[NSRunLoop(NSRunLoop)runMode:beforeDate:]
- 7. 多個NSURLConnection&NSRunLoop
- 8. 瞭解NSRunLoop
- 9. NSTimer和NSRunLoop
- 10. NSRunLoop做什麼?
- 11. 停止的NSRunLoop
- 12. iphone cocoa使用nsrunloop
- 13. NSRunLoop計時問題
- 14. 詳細介紹nsrunloop
- 15. NSRunLoop和GCD隊列
- 16. 如何停止NSRunLoop
- 17. 的NSTimer/NSRunLoop發出
- 18. NSRunLoop線程安全嗎?
- 19. 如何正確停止NSRunLoop?
- 20. NSRunLoop期間CFHTTPStream分割faul
- 21. 在NSRunLoop,澄清需要
- 22. NSRunLoop runMode:beforeDate:不要等待
- 23. 創建自定義NSRunLoop
- 24. 「[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]」do?
- 25. NSRunLoop後臺任務有效
- 26. 保持NSThread活着,並運行它的NSRunLoop
- 27. 在不同的NSThread/NSRunLoop中運行和管理NSTimer
- 28. dispatch_group_wait不能按預期運行,除非與NSRunLoop一起使用?
- 29. 運行NSRunLoop不同日期觀察到變化的線程數
- 30. NSRunLoop只運行,直到所有的事件都完成