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 的討論有興趣。

沒有留言:

張貼留言