1. 程式人生 > 其它 >同步函式與非同步函式

同步函式與非同步函式

(1)   同步函式:當一個函式是同步執行時,那麼當該函式被呼叫時不會立即返回,直到該函式所要做的事情全都做完了才返回。

(2)   非同步函式:如果一個非同步函式被呼叫時,該函式會立即返回儘管該函式規定的操作任務還沒有完成。

(3) 在一個執行緒中分別呼叫上述兩種函式會對呼叫執行緒有何影響呢?

        當一個執行緒呼叫一個同步函式時(例如:該函式用於完成寫檔案任務),如果該函式沒有立即完成規定的操作,則該操作會導致該呼叫執行緒的掛起(將CPU的使用權交給系統,讓系統分配給其他執行緒使用),直到該同步函式規定的操作完成才返回,最終才能導致該呼叫執行緒被重新排程。

         當一個執行緒呼叫的是一個非同步函式(例如:該函式用於完成寫檔案任務),該函式會立即返回儘管其規定的任務還沒有完成,這樣執行緒就會執行非同步函式的下一條語句,而不會被掛起。那麼該非同步函式所規定的工作是如何被完成的呢?當然是通過另外一個執行緒完成的了啊;那麼新的執行緒是哪裡來的呢?可能是在非同步函式中新建立的一個執行緒也可能是系統中已經準備好的執行緒。

(4)一個呼叫了非同步函式的執行緒如何與非同步函式的執行結果同步呢?

        為了解決該問題,呼叫執行緒需要使用“等待函式”來確定該非同步函式何時完成了規定的任務。因此線上程呼叫非同步函式之後立即呼叫一個“等待函式”掛起呼叫執行緒,一直等到非同步函式執行完其所有的操作之後,再執行執行緒中的下一條指令。

搜尋

複製