From: SASADA Koichi Date: 2014-03-20T17:12:23+09:00 Subject: [ruby-core:61608] Re: [REJECT?] xmalloc/xfree: reduce atomic ops w/ thread-locals (2014/03/16 5:41), Eric Wong wrote: > Should we care to support xmalloc/xfree in non-Ruby native threads? > I think it's too much work. How about this strategy using ? # pseudo_code: size_t malloc_increase; atomic_size_t atomic_malloc_increase; def ruby_xmalloc(size) if is_native_thread? && has_gvl? malloc_increase += size if (malloc_increase + atomic_malloc_increase) > malloc_limit GC() end else atomic_update{atomic_malloc_increase += size} end end Problem is the performance of `is_native_thread? && has_gvl?'. Every time. Or separate ruby_xmalloc() to rb_xmalloc(), it is for limited version called only from `is_native_thread? && has_gvl?' # pseudo_code def rb_xmalloc(size) ... # code protected by GVL end def ruby_xmalloc(size) if is_native_thread? && has_gvl? rb_xmalloc(size) else atomic_update{atomic_malloc_increase += size} end end -- // SASADA Koichi at atdot dot net