2012/3/20

GCD Test

GCD,grand-central-dispatch
GCD是作業系統處理多執行緒一種方式
我們可以想像成和一般的多執行緒一樣
至於iOS的作業系統如何實現他,就先不考慮他
參考文章 http://jackiexie.blogspot.com/2010/09/grand-central-dispatch.html 

iOS預設的多執行緒NSOperation,其實也是透實作GCD來實現,但我覺得直接使用block來寫,比寫NSOperation還要簡單...  XD

以下為簡單範例

NSLog(@"ready");
 
 dispatch_async(dispatch_get_global_queue(0, 0), ^{
  NSLog(@"GCD on global Queue");
  NSLog(@"start sleep....");
  for(int i=0;i<5;i++)
  {
   NSLog(@"sleep.....%u",i);
   sleep(1);
  }
  NSLog(@"complete");
  dispatch_async(dispatch_get_main_queue(),^{
   NSLog(@"CGD on Main Queue");
  });
 });

 
 NSLog(@"weak up");
  [super viewDidLoad];
而執行結果為:
2012-03-20 17:41:18.181 GCDTest[12292:207] ready
2012-03-20 17:41:18.182 GCDTest[12292:207] weak up
2012-03-20 17:41:18.183 GCDTest[12292:3603] GCD on global Queue
2012-03-20 17:41:18.184 GCDTest[12292:3603] start sleep....
2012-03-20 17:41:18.185 GCDTest[12292:3603] sleep.....0
2012-03-20 17:41:19.188 GCDTest[12292:3603] sleep.....1
2012-03-20 17:41:20.190 GCDTest[12292:3603] sleep.....2
2012-03-20 17:41:21.191 GCDTest[12292:3603] sleep.....3
2012-03-20 17:41:22.192 GCDTest[12292:3603] sleep.....4
2012-03-20 17:41:23.193 GCDTest[12292:3603] complete
2012-03-20 17:41:23.194 GCDTest[12292:207] CGD on Main Queue
非常有趣的GCD實驗 雖然還搞不清楚和multi thread的差異在那 不過有這個撰寫非同步程式,就簡單的多了

沒有留言: