[多核心課程紀錄] 多核心軟體開發的關鍵:Thread Object Model

jollen 發表於 November 11, 2011 4:11 PM

關於Java virtual machine的Thread object model,理論上的做法是「一個Thread object連繫(Binding)到一個native thread」。從multi-core的角度來看,這是一個很理想的做法,實務上是否有採用這種Thread object model的Java virtual machine呢?答案是,有的;這取決於virtual machine與作業系統的設計。

JDK6搭配Ubuntu 8.04的環境,以及Android 2.3搭配MagicLego的kernel來看,都是上述的thread model。當然,這裡只是以我自已目前使用中的開發環境當例子,不僅只於這二個環境。

為什麼一個Thread object連繫一個Native thread是比較好的做法,適合應用在multi-core的場合,這涉及到多核心的kernel scheduling技術,在後續的文章裡再做討論。基本上,只要您的系統是屬於上述的Thread object model,未來都能提供一個良好的多核心軟體開發環境。

應用程式到框架,框架透過JNI來到C/C++底層,Thread object與Native thread是一對一關係時,作業系統再將指定的Native thread指派到另外一個處理器,接下來就可以得到這樣的效果:Thread object被指派到另外一個處理器了。這就是為什麼應用程式的設計,以及底層的軟體系統,決定了系統是否能實現「多核心運算」的原因。

讀者留言 (2)

  • vincent 於 November 17, 2011 10:35:

    Jollen 您好
    我當天有去上multi-core課程, 有幾個疑惑想請教一下

    1. 關於thread affinity:
    GNU/Linux glibc 可以使用 pthread_setaffinity_np,
    那Android/Linux Bionic有支援thread affinity嗎? (好像bionic只有支援process affinity,是不是因為目前bionic還沒有支援memory barriers所以就無法支援thread affinity?)

    2. 若不支援thread-affinity, 則Jollen提到的android thread mode是適合多處理器架構的,似乎有點矛盾

    3. 請問目前dalvik vm有辦法將java thread對應到native thread嗎

    thanks & Regards

  • jollen 於 November 17, 2011 17:17:

    Hi Vincent,

    thread affinity 很關鍵,目前 Bionic pthread 支援程度不夠,所以 Android 2.3 還無法真正支持 Multi-core。當天上課是以 2.3 做為基礎。

    Dalvik VM 可以把 thread object binding 到一個 native thread。

留言功能維護中。將於近日重新開放。

連絡作者

Jollen Chen,Moko365(仕橙3G教室)講師,熱愛研究 Linux 與 Android 技術。曾為 Motorola、HTC、Foxconn、LG、OPPO、騰迅、廣達電腦、緯創、仁寶等超過 50 家企業講授課程。目前在 MokoVersity 擔任軟體工程師,撰寫 Node.js 程式,也在幾家科技廠兼任 Android Framework 研發顧問。您可透過電子郵件 <jollen (at) jollen (dot) org> 或這裡與我連絡。