tech-sjh

2013年2月18日 星期一

因應 ruby(python) interpreter GIL 使用多核心的記憶體問題

閱讀 Malthe Boltche 的 Hog that CPU

http://www.maltheborch.com/2013/02/hog-that-cpu
原本是講 python 但是也有提到 ruby 的部分

使用多核心與記憶體的關係:
Python 跟 Ruby 兩個 script language 因為在 interpreter 採用 GIL,
因此單一 interpreter 會有無法用到多核心效能的問題,

如果要使用多核心的效能,必須為每一個核心各 fork 新增一個
 interpreter 實體,但同時也因此變成吃記憶體的怪獸,比如使用
ruby on rails framework 一個實體就可能吃掉數百 MB 的記憶體
空間,而使用多核心(或新增 ruby process 處理新的 http requrest)時
多產生的 interpreter 實體可能很容易就用完系統記憶體。

Ruby EE, Rubinius 跟 jRuby 一樣採用 copy on write 的 shared
memory 共享記憶體方式,而在 Ruby 2.0 加強的 bitmap marking GC
 algorithm 可以減少 ruby process 在 web framework 的記憶體使用量

而 ruby GC 演算法改進可以看
python 的使用者可能會對 hog that cpu 後半段討論的 CPython 在單
核心使用 mulithreading 但遇到 no thread safe 的討論有興趣。

沒有留言:

張貼留言

版權宣告、免責聲明


創用 CC 授權條款
本著作係採用創用 CC 姓名標示-非商業性-相同方式分享 4.0 國際 授權條款授權.
免責聲明: 本文所載資料僅供參考,並不構成投資建議,
讀者閱讀或使用該資料所導致結果需要自擔風險與責任,
作者概不承擔閱讀人行為之任何風險與責任。
除非有特別宣稱,作者言論並不代表所屬任何團體、公司、或其他人意見。