我不宅,我只是不出門

Murmur of a technical dude

Using shared memory in libchewing

leave a comment »

OVIMSpaceChewing 中有一段 constructor 的 code 如下,

ReadTree( dataDir );
InitChar( dataDir );
InitDict( dataDir );
ReadHash( hashDir );
InitChewing(cd,cf);

其中的 ReadTree、InitChar、InitDict 都是去讀取已經做好的資料表格或 index。幾乎都是 fscanf 到程式裡面的 structures,雖然是只有載入時才會執行,但是這樣每個有用到輸入法的 process 都會各自保有一份卻又相同的東西。且在每個 process 第一次切換到 Chewing 時候都要載入,感覺會頓一下(硬碟慢 XD)。

這些 table 和 index 幾乎使用者不會去更改,所以從開機到結束或關電腦都是一樣的東西。乾脆就把他們丟到 shared memory(SHM) 去。只要第一個載入後,發現 SHM 中沒有這些東西,就自己 create & load 相關 structures;其他別的 process 再次使用輸入法時,就不用再去幹同一件事情,順便節省一下記憶體空間。

修改了之後,啟動新的 process 切換到 OV Chewing 似乎有快一點,不過 ReadHash 那邊還是個大問題待解決。當 hash.dat 變大,載入時間也會變長,hash 資料同步等等的問題。不過要改 ReadHash,還得解決 process 之間 synchronous 問題。擺在 SHM 不是好方法,因為 hash 會增加,且 mac os x 在開機時候 rc 就預設 SHM 最大 4MB。
Files: OVIMSpaceChewing.tar.bz2OVIMChewing.dylib.bz2

Tags: , chinese, chewing, OpenVanilla

Written by jclin

2005/08/26 於 10:03 下午

張貼於talk

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s

%d 位部落客按了讚: