Grand Central Dispatch 試玩

[華語, cmn-Hant-TW]

因為開有多執行緒的需求,就研究了一下 mac 的 framework 有提供哪些東西可以用。初步看來就是傳統 pthread 跟 NSThread 可以用,不過 Thread 程式寫起來一向就很煩,所以就想找找有啥替代品可以用,後來就注意到 Mac OS X 10.6 (iOS 4)之後新加的 Grand Central Dispatch。

基本概念很簡單,就是把你要做的東西加進 queue 就好了。把要做的事情放在同一個 queue 的話他就會照順序一個一個執行,當然你可以開很多個 queue 同時跑,那就可以一次做很多事情,直到把系統榨乾為止。

首先要開一個 queue
dispatch_queue_t queue = dispatch_queue_create("cc.pighead.queue", NULL);

第一個參數可以隨便打,第二個參數在 10.6 沒用,10.7 以上才有用途。

然後把要執行的程式碼放進 queue 裡面
dispatch_async(queue, ^{
  printf("this is a block!\n");
});

裡面包住的東西叫 block,至於 block 是啥這邊先不管他,反正就是包在裡面的程式碼會被另外開一個執行緒來跑就是。

然後把他 sync 回來
dispatch_sync(queue, ^{});
最後 release 掉
dispatch_release(queue);

要同時跑很多的話就多開幾個就可以了,想開幾個就開幾個,在 sync 之前所有的 queue 都可以同時跑,如果有變數會共用的話記得用 lock 或是 @sychronized 這些的東西來控管,大致上就是這樣。另外還有 queue 群組跟 for loop 拆解成平行處理的用法,這次沒用到所以就沒特別去注意了。

話說 FreeBSD 上也是可以用 Grand Central Dispatch 的,用法也差不多,需要的是新一點的 kernel、llvm/clang 編譯器以及 devel/libdispatch 這個 port。

參考文件

A Simple Job Queue With Grand Central Dispatch

Multithreading and Grand Central Dispatch on iOS for Beginners Tutorial

Nullified Construction

Mac OS X (Cocoa) NSLock

GCD on FreeBSD

 

iPhone 3G + iOS 4.0

[華語, cmn-Hant-TW]

賀米國政府認定 iPhone 破解 (jailbreak) 合法,升級 iOS 4 慶祝一下!

沒有啦,其實就跟上次等 MobileLog 推出後才升級的情況一樣,這次也是等到 MobileLog 4.0 出之後才考慮升級到 iOS 4.0。
iPhone 3G 破解的方式和從前並沒有什麼太大的不同,抓了新的 PwnageTool 做好軔體之後,一樣是用 iTunes 塞進去即可。
結果除了歌以外的東西都復原之後,重開機居然就吃白鳳梨了?! 經過幾次嘗試後發現問題是卡在 /etc/group, iOS 3.x 和 4.0 的 group 有些許差異,不要動到這個檔案問題就不大。

iOS 4 有兩個重要的功能 (桌布和多工) 是不給 iPhone 3G 跑的,不過其實只是封印起來而已,破解之後可以安裝 zToggle 這個程式來開啟關閉這兩個功能,當然了這是 iPhone 3G 限定, 3GS/4 不需要這個。 實際使用後發現那個多工真的很虛,應該要正名為「最近開啟之程式」才對,所以就把他關掉回去用 backgrounder 了。

有人建議 iPhone 3G 可以把 Spotlight 關掉,這樣會比較不耗資源,跑的比較順。沒有實際去測量對照,不過 Spotlight 本來就是在背景掃描檔案內容,理論上確實會比較省資源,所以就把他掃描的子項目通通都關掉,可惜主畫面的頁面消不掉就是。

輸入法的部份變化不小,首先是鍵盤可以用長按來跳選,這對使用不只一個輸入法的人來說方便不少,然後每種輸入法的排列又分成軟體鍵盤和硬體鍵盤,看起來是為了外接鍵盤做準備,不過手上沒有適合的藍芽鍵盤,就沒特別研究下去了。

Posted in iPod, iPhone, iTunes. Tags: , . No Comments »