HNHacker News
TopNewBestAskShowJobs

_ko1

44 karma · joined September 8, 2016

submissionscomments
_ko1··on Ruby 3x3: Matz, Koichi, and Tenderlove on the Future of Ruby Performance
> Koichi: I do think so.

This is mistake. I said "I don't think so". 30% is not enough.

_ko1··on Proposal of a new concurrency model for Ruby 3 [pdf]
More correctly, making a OS thread per a Ruby thread, and creating a Guild makes 1 Ruby thread.
_ko1··on Proposal of a new concurrency model for Ruby 3 [pdf]
Yes.

Actually, I think Go is some kind of multi-thraeding (goroutine is only a useful mechanism on the "threads" and can't help to avoid multi-threads difficulties (but this design helps to reduce difficulties)).

_ko1··on Proposal of a new concurrency model for Ruby 3 [pdf]
Because of current limitation. We'll improve it.
_ko1··on Proposal of a new concurrency model for Ruby 3 [pdf]
Yes.
_ko1··on Proposal of a new concurrency model for Ruby 3 [pdf]
absolutely.
_ko1··on Proposal of a new concurrency model for Ruby 3 [pdf]
> Thus, you would have to traverse the entire linked data structure to transfer ownership of every node. This is O(n) work.

Correct.

> Making things worse, you would have to make sure that the ownership transfer is atomic - no other part of the program should see the data structure in a “partially transferred” state.

Correct. Guild::Channel#transfer_ownership() does it.

Basically, share big linked data with multiple threads is difficult (simply we need to lock every access).

> Another example: Say you initially have a guild with three objects, Foo, Bar and Qux, where Foo and Bar point to Qux. If I transfer ownership of Foo, should Qux be transferred as well?

Foo -> Qux; Bar -> Qux

Yes, Qux also moved. Programmer can know by "exception" when accessing Qux via Bar after transfer.

This "realization" is the key of Guild. On threads, we can't realize that Qux is shared mutable.

_ko1··on Proposal of a new concurrency model for Ruby 3 [pdf]
So we need to rewrite to support multi-guilds application.
_ko1··on Proposal of a new concurrency model for Ruby 3 [pdf]
Like sub-process, but share many things like bytecodes (ISeq in MRI context), class and module objects (and method tables) and so on. Also we can share immutable objects (deeply frozen objects) like threads.
_ko1··on Proposal of a new concurrency model for Ruby 3 [pdf]
CRuby/MRI supports C-extension which can use TLS (thread-local-storage). So that each Ruby threads runs on one OS thread.
_ko1··on Proposal of a new concurrency model for Ruby 3 [pdf]
Similar to Erlang process, but more heavy weight (because it creates OS thread per Guild).
_ko1··on Proposal of a new concurrency model for Ruby 3 [pdf]
Yes.
_ko1··on Proposal of a new concurrency model for Ruby 3 [pdf]
Quoted from slides: > GC/Heap > * Share it. Do stop the world parallel marking- and lazy concurrent sweeping. > * Synchronize only at page acquire timing. No any synchronization at creation time.
_ko1··on Proposal of a new concurrency model for Ruby 3 [pdf]
It's magic of transferring membership. I omitted details on slides.
_ko1··on Proposal of a new concurrency model for Ruby 3 [pdf]
Could you link to http://www.atdot.net/~ko1/activities/2016_rubykaigi.pdf ? current one is on temporary file space (will be removed soon).