summaryrefslogtreecommitdiff
path: root/ractor.rb
AgeCommit message (Collapse)Author
2023-12-16remove `Ractor::Selector` from Ruby levelKoichi Sasada
`Ractor::Selector` is not approved by Matz so remove it from Ruby-level. The implementation is used by `Ractor.select` so most of implementation was remaind and calling `rb_init_ractor_selector()`, `Ractor::Selector` will be defined. I will provide `ractor-selector` gem to try it.
2023-03-03`Ractor::Selector#empty?`Koichi Sasada
It returns the waiting set is empty or not. Also add Ractor::Selector's tests. Notes: Merged: https://github.com/ruby/ruby/pull/7417
2023-03-02Rewrite Ractor synchronization mechanismKoichi Sasada
This patch rewrites Ractor synchronization mechanism, send/receive and take/yield. * API * Ractor::Selector is introduced for lightweight waiting for many ractors. * Data structure * remove `struct rb_ractor_waiting_list` and use `struct rb_ractor_queue takers_queue` to manage takers. * remove `rb_ractor_t::yield_atexit` and use `rb_ractor_t::sync::will_basket::type` to check the will. * add `rb_ractor_basket::p.take` to represent a taking ractor. * Synchronization protocol * For the Ractor local GC, `take` can not make a copy object directly so ask to generate the copy from the yielding ractor. * The following steps shows what `r1.take` does on `r0`. * step1: (r0) register `r0` into `r1`'s takers. * step2: (r0) check `r1`'s status and wakeup r0 if `r1` is waiting for yielding a value. * step3: (r0) sleep until `r1` wakes up `r0`. * The following steps shows what `Ractor.yield(v)` on `r1`. * step1: (r1) check first takers of `r1` and if there is (`r0`), make a copy object of `v` and pass it to `r0` and wakes up `r0`. * step2: (r1) if there is no taker ractors, sleep until another ractor try to take. Notes: Merged: https://github.com/ruby/ruby/pull/7371
2023-02-27Fix spelling (#7389)John Bampton
Notes: Merged-By: k0kubun <takashikkbn@gmail.com>
2023-01-29[DOC] Make changes to docs in ractor.rb (#7180)Luke Gruber
* Make changes to docs in ractor.rb Mainly English changes to make things more clear, and to fix minor non-idiomatic phrases. Also clarified difference between frozen and shareable objects. * More minor changes to Ractor docs. Notes: Merged-By: zzak <zzakscott@gmail.com>
2022-10-26[Bug #19081] Show the caller location in warning for RactorNobuyoshi Nakada
The internal location in ractor.rb is not usefull at all. ``` $ ruby -e 'Ractor.new {}' <internal:ractor>:267: warning: Ractor is experimental, ... ``` Notes: Merged: https://github.com/ruby/ruby/pull/6629 Merged-By: nobu <nobu@ruby-lang.org>
2022-08-28[DOC] Correct article of Ractor's introduction [ci skip]Felix Yan
Notes: Merged: https://github.com/ruby/ruby/pull/6293 Merged-By: nobu <nobu@ruby-lang.org>
2022-07-28Fix conversion of `rb_ractor_id()`Nobuyoshi Nakada
2021-09-15[DOC] Fix broken links [ci skip]Nobuyoshi Nakada
* As the "doc/" prefix is specified by the `--page-dir` option, remove from the rdoc references. * Refer to the original .rdoc instead of the converted .html.
2021-09-05Replace RBOOL macroS-H-GAMELINKS
Notes: Merged: https://github.com/ruby/ruby/pull/4791
2021-04-26Fix some typos by spell checkerRyuta Kamizono
Notes: Merged: https://github.com/ruby/ruby/pull/4414
2021-01-10Fix ractor docs (#4048) [doc]Tom Chen
Notes: Merged-By: marcandre <github@marc-andre.ca>
2020-12-24Add call-seq to Ractor doc; improve wording [doc]Marc-Andre Lafortune
Notes: Merged: https://github.com/ruby/ruby/pull/3992
2020-12-22[DOC] Fix typo in Ractor.make_shareable documentation.nagachika
2020-12-22fix ractor's doc. [ci skip]Koichi Sasada
Notes: Merged: https://github.com/ruby/ruby/pull/3960
2020-12-22add Ractor.mainKoichi Sasada
It returns main Ractor, like Thread.main. [Feature #17418] Notes: Merged: https://github.com/ruby/ruby/pull/3963
2020-12-22add Ractor#[]/#[]= for ractor local storageKoichi Sasada
This API is similar to plain old Thread#[]/Fiber#[] interface with symbol key. Notes: Merged: https://github.com/ruby/ruby/pull/3962
2020-12-21Ractor#to_s as #inspectMarc-Andre Lafortune
2020-12-22separate rb_ractor_pub from rb_ractor_tKoichi Sasada
separate some fields from rb_ractor_t to rb_ractor_pub and put it at the beggining of rb_ractor_t and declare it in vm_core.h so vm_core.h can access rb_ractor_pub fields. Now rb_ec_ractor_hooks() is a complete inline function and no MJIT related issue. Notes: Merged: https://github.com/ruby/ruby/pull/3943
2020-12-21rename to rb_ractor_make_shareable_copy()Koichi Sasada
from rb_ractor_make_copy_shareable().
2020-12-20Adjusted indents of closing braces [ci skip]Nobuyoshi Nakada
2020-12-20fix indentKoichi Sasada
2020-12-19Add documentation for Ractor (#3895)Victor Shepelev
Notes: Merged-By: marcandre <github@marc-andre.ca>
2020-12-19Strip trailing spaces [ci skip]Nobuyoshi Nakada
2020-12-19add "copy: true" option for Ractor.make_shareableKoichi Sasada
Ractor.make_shareable(obj) tries to make obj a shareable object by changing the attribute of obj and traversable objects from obj (mainly freeze them). "copy: true" option is more conservative approach by make deep copied object and make it sharable. It doesn't affect any existing objects.
2020-12-16Make Ractor#receive_if privateMarc-Andre Lafortune
2020-12-16Ractor#receive_if to receive only matched messagesKoichi Sasada
Instead of Ractor.receive, Ractor.receive_if can provide a pattern by a block and you can choose the receiving message. [Feature #17378] Notes: Merged: https://github.com/ruby/ruby/pull/3862
2020-12-16fix Ractor#receive by other ractorsKoichi Sasada
Ractor#receive can be called by the another Ractors using send, so making this method completely same as `Ractor.receive` even if the ractor is specified by the receiver (OO term :p).
2020-12-14Call FrozenCore.make_shareableNobuyoshi Nakada
Notes: Merged: https://github.com/ruby/ruby/pull/3681
2020-12-14Implemented shareable_constant_valueNobuyoshi Nakada
It does shallow freeze only for now. Notes: Merged: https://github.com/ruby/ruby/pull/3681
2020-12-07Ractor.select requires an argument or yield_valueMarc-Andre Lafortune
Notes: Merged: https://github.com/ruby/ruby/pull/3848
2020-11-11remove Ractor#closeKoichi Sasada
close_incoming by antoher ractor means there is no other messages will be sent to the ractor, so Ractor.receive will block forever, and it should raise and stop. close_outgoing by antoher ractor means, ... I don't have good idea to use it. It can be a private method. Ractor#close calls both, but it does not make sense to call different purpose methods, so I remove it. Notes: Merged: https://github.com/ruby/ruby/pull/3759
2020-10-30Tweak return of `Ractor#close`, add docMarc-Andre Lafortune
Notes: Merged: https://github.com/ruby/ruby/pull/3696
2020-10-21Ractor.make_shareable(obj)Koichi Sasada
Introduce new method Ractor.make_shareable(obj) which tries to make obj shareable object. Protocol is here. (1) If obj is shareable, it is shareable. (2) If obj is not a shareable object and if obj can be shareable object if it is frozen, then freeze obj. If obj has reachable objects (rs), do rs.each{|o| Ractor.make_shareable(o)} recursively (recursion is not Ruby-level, but C-level). (3) Otherwise, raise Ractor::Error. Now T_DATA is not a shareable object even if the object is frozen. If the method finished without error, given obj is marked as a sharable object. To allow makng a shareable frozen T_DATA object, then set `RUBY_TYPED_FROZEN_SHAREABLE` as type->flags. On default, this flag is not set. It means user defined T_DATA objects are not allowed to become shareable objects when it is frozen. You can make any object shareable by setting FL_SHAREABLE flag, so if you know that the T_DATA object is shareable (== thread-safe), set this flag, at creation time for example. `Ractor` object is one example, which is not a frozen, but a shareable object. Notes: Merged: https://github.com/ruby/ruby/pull/3678
2020-10-20add Ractor.shareable?(obj)Koichi Sasada
This method returns obj is shareable or not. Notes: Merged: https://github.com/ruby/ruby/pull/3672
2020-10-12ractor.rb - indent comment code [ci skip]MSP-Greg
Notes: Merged: https://github.com/ruby/ruby/pull/3648
2020-10-10Add Ractor#receive and Ractor.receive and use it in all placesBenoit Daloze
* Keep Ractor#recv/Ractor.recv as an alias for now. Notes: Merged: https://github.com/ruby/ruby/pull/3626
2020-09-20Add status to Ractor#inspectQuang-Minh Nguyen
Notes: Merged: https://github.com/ruby/ruby/pull/3555
2020-09-03Introduce Ractor mechanism for parallel executionKoichi Sasada
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. Notes: Merged: https://github.com/ruby/ruby/pull/3365