Run loops 的具體執行順序(ios oc

2021-07-11 01:47:24 字數 1180 閱讀 6865

run loops 是執行緒相關的的基礎框架的一部分。乙個 run loop 就是乙個事件處理 的迴圈,用來不停的排程工作以及處理輸入事件。

使用run loop

的目的是讓你的線

程在有工作的時候忙於工作

,而沒工作的時候處於休眠狀態。

runloop

還可以在

loop

在迴圈中的同時響應其他輸入源,比如介面控制項的按鈕,手勢等。

run loop 模式是所有要監視的輸入源和定時源以及要通知的 run loop 註冊觀察 者的集合。

可以將 run loop 觀察者和以下事件關聯:

run loop 入口

run loop 何時處理乙個定時器

run loop 何時處理乙個輸入源

run loop 何時進入睡眠狀態

run loop 何時被喚醒,但在喚醒之前要處理的事件

run loop 終止

每次執行 run loop,你執行緒的 run loop 對會自動處理之前未處理的訊息,並通知相關的觀察者。具體的順序如下:

1. 通知觀察者 run loop 已經啟動。

2. 通知觀察者任何即將要開始的定時器。

3. 通知觀察者任何即將啟動的非基於埠的源。

4. 啟動任何準備好的非基於埠的源。

5. 如果基於埠的源準備好並處於等待狀態,立即啟動;並進入步驟 9。

6. 通知觀察者執行緒進入休眠。

7. 將執行緒置於休眠直到任一下面的事件發生:

某一事件到達基於埠的源;

定時器啟動;

run loop 設定的時間已經超時;

run loop 被顯式喚醒。

8. 通知觀察者執行緒將被喚醒。

9. 處理未處理的事件

如果使用者定義的定時器啟動,處理定時器事件並重啟 run loop。進入步驟 2。

如果輸入源啟動,傳遞相應的訊息。

如果 run loop 被顯式喚醒而且時間還沒超時,重啟 run loop,進入步驟 2。

10. 通知觀察者 run loop 結束。

run loop 在你要和執行緒有更多的互動時才需要,比如以下情況:

使用埠或自定義輸入源來和其他執行緒通訊;

使用執行緒的定時器;

cocoa 中使用任何performselector...的方法;

使執行緒週期性工作。

struts的具體執行過程

struts有乙個 控制器actionservlet,負責處理使用者的url請求,actionservlet在web.xml檔案中配置,它繼承了httpservlet,其實就是乙個普通的servlet。actionservlet中有兩個方法,如下 process方法繼續呼叫requestproces...

Lua順序 執行順序

nginx下lua處理階段與使用範圍 例如lua shared dict共享記憶體的申請,只有當nginx重起後,共享記憶體資料才清空,這常用於統計。set by lua 設定乙個變數,常用與計算乙個邏輯,然後返回結果 該階段不能執行output api control api subrequest...

new運算的具體執行過程

function person name,age var p1 new person 小明 20 console.log p1 1.建立乙個空物件 var obj new object 2.讓person中的this指向obj,並執行person的函式體 var result person.call...