1. 程式人生 > >同步執行緒和非同步執行緒的區別

同步執行緒和非同步執行緒的區別

1:同步可以看做是一個單執行緒操作,只要客戶端請求了,在伺服器沒有反饋資訊之前是一個執行緒阻塞狀態(就是假死狀態,不能操作其他方法)。

2:非同步肯定是個多執行緒。在客戶端請求時,可以執行其他執行緒,並且在把這個執行緒存放在他的佇列裡面,有序的執行。(可以設定執行緒的數量,當超過最大時會顯示等待狀態)。

執行緒同步與非同步區別

執行緒同步是多個執行緒同時訪問同一資源,等待資源訪問結束,浪費時間,效率低    執行緒非同步:訪問資源時在空閒等待時同時訪問其他資源,實現多執行緒機制

非同步處理就是,你現在問我問題,我可以不回答你,等我用時間了再處理你這個問題.同步不就反之了,同步資訊被立即處理 -- 直到資訊處理完成才返回訊息控制代碼;非同步資訊收到後將在後臺處理一段時間 -- 而早在資訊處理結束前就返回訊息控制代碼


簡單來說:同步必須執行到底之後才能執行其他操作,而非同步可以任意操作

區別:同步比非同步實現起來簡單一些,用於讀取資料量較小的介面。

            非同步可以按規定順序去執行執行緒,多用於 比如一個網頁資訊 ,(你把他分成2個執行緒或者多個,先讀取它的title,時間,作者等等 第二個或者其他程序用於讀取資料量較大的正文內容,比如圖片)。這樣對於使用者體驗很有效果。

下面是同步,非同步實現的方法 (從網上覆制的)

1. 同步意為著執行緒阻塞,在主執行緒中使用此方法會不響應任何使用者事件。所以,在應用程式設計時,大多被用在專門的子執行緒增加使用者體驗,或用非同步請求代替。

- (IBAction)grabURL:(id)sender  { 

 NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"]; 

  ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 

  [request startSynchronous]; 

  NSError *error = [request error]; 

  if (!error) {  NSString *response = [request responseString];  }  

用 requestWithURL 快捷方法獲取 ASIHTTPRequest 的一個例項

startSynchronous 方法啟動同步訪問

由於是同步請求,沒有基於事件的回撥方法,所以從 request的error 屬性獲取錯誤資訊

responseString,為請求的返回 NSString 資訊 *

注意:在這裡我發現NsUrlRequset和connect系統Api就可以配合做到效果。也不需要到移植開原始碼

2. 非同步請求的好處是不阻塞當前執行緒,但相對於同步請求略為複雜,至少要新增兩個回撥方法來獲取非同步事件