| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
| |
* Keep Ractor#recv/Ractor.recv as an alias for now.
|
| |
|
|
|
|
|
| |
A frozen Struct object which refers to shareable objects should be
shareable.
|
|
|
|
|
| |
Ractor.yield should raise Ractor::ClosedError if current Ractor's
outgoing-port is closed.
|
|
|
|
|
| |
If an T_OBJECT object is frozen and all ivars are shareable,
the object should be shareable.
|
|
|
|
|
|
| |
Ractor#close_outgoing should cancel waiting Ractor.yield. However,
yield a value by the Ractor's block should not cancel (to recognize
terminating Ractor, introduce rb_ractor_t::yield_atexit flag).
|
|
|
|
|
| |
We observed mark miss on this point so we add RB_GC_GUARD() to
avoid wrong free.
|
| |
|
| |
|
| |
|
|
|
|
|
| |
signal can interrupt Ractor.select, but if there is no exception,
Ractor.select should restart automatically.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
| |
rb_ractor_main_p() need to access to the ractor pointer in TLS.
However it is slow operation so that we need to skip this check
if it is not multi-ractor mode (!ruby_multi_ractor).
This performance regression is pointed at
https://bugs.ruby-lang.org/issues/17100#note-27
|
| |
|
|
This commit introduces Ractor mechanism to run Ruby program in
parallel. See doc/ractor.md for more details about Ractor.
See ticket [Feature #17100] to see the implementation details
and discussions.
[Feature #17100]
This commit does not complete the implementation. You can find
many bugs on using Ractor. Also the specification will be changed
so that this feature is experimental. You will see a warning when
you make the first Ractor with `Ractor.new`.
I hope this feature can help programmers from thread-safety issues.
|