summaryrefslogtreecommitdiff
path: root/ractor.rb
Commit message (Collapse)AuthorAgeFilesLines
* Fix ractor docs (#4048) [doc]Tom Chen2021-01-101-3/+3
|
* Add call-seq to Ractor doc; improve wording [doc]Marc-Andre Lafortune2020-12-241-18/+59
|
* [DOC] Fix typo in Ractor.make_shareable documentation.nagachika2020-12-221-1/+1
|
* fix ractor's doc. [ci skip]Koichi Sasada2020-12-221-17/+36
|
* add Ractor.mainKoichi Sasada2020-12-221-0/+7
| | | | | It returns main Ractor, like Thread.main. [Feature #17418]
* add Ractor#[]/#[]= for ractor local storageKoichi Sasada2020-12-221-0/+10
| | | | | This API is similar to plain old Thread#[]/Fiber#[] interface with symbol key.
* Ractor#to_s as #inspectMarc-Andre Lafortune2020-12-211-0/+2
|
* separate rb_ractor_pub from rb_ractor_tKoichi Sasada2020-12-221-5/+5
| | | | | | | | | 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.
* rename to rb_ractor_make_shareable_copy()Koichi Sasada2020-12-211-1/+1
| | | | from rb_ractor_make_copy_shareable().
* Adjusted indents of closing braces [ci skip]Nobuyoshi Nakada2020-12-201-12/+12
|
* fix indentKoichi Sasada2020-12-201-1/+1
|
* Add documentation for Ractor (#3895)Victor Shepelev2020-12-191-90/+608
|
* Strip trailing spaces [ci skip]Nobuyoshi Nakada2020-12-191-1/+1
|
* add "copy: true" option for Ractor.make_shareableKoichi Sasada2020-12-191-4/+23
| | | | | | | | | | 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.
* Make Ractor#receive_if privateMarc-Andre Lafortune2020-12-161-1/+1
|
* Ractor#receive_if to receive only matched messagesKoichi Sasada2020-12-161-0/+41
| | | | | | | Instead of Ractor.receive, Ractor.receive_if can provide a pattern by a block and you can choose the receiving message. [Feature #17378]
* fix Ractor#receive by other ractorsKoichi Sasada2020-12-161-2/+2
| | | | | | 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).
* Call FrozenCore.make_shareableNobuyoshi Nakada2020-12-141-4/+0
|
* Implemented shareable_constant_valueNobuyoshi Nakada2020-12-141-0/+4
| | | | It does shallow freeze only for now.
* Ractor.select requires an argument or yield_valueMarc-Andre Lafortune2020-12-071-0/+2
|
* remove Ractor#closeKoichi Sasada2020-11-111-8/+0
| | | | | | | | | | | | 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.
* Tweak return of `Ractor#close`, add docMarc-Andre Lafortune2020-10-301-0/+5
|
* Ractor.make_shareable(obj)Koichi Sasada2020-10-211-0/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* add Ractor.shareable?(obj)Koichi Sasada2020-10-201-0/+7
| | | | This method returns obj is shareable or not.
* ractor.rb - indent comment code [ci skip]MSP-Greg2020-10-121-26/+26
|
* Add Ractor#receive and Ractor.receive and use it in all placesBenoit Daloze2020-10-101-20/+24
| | | | * Keep Ractor#recv/Ractor.recv as an alias for now.
* Add status to Ractor#inspectQuang-Minh Nguyen2020-09-201-3/+6
|
* Introduce Ractor mechanism for parallel executionKoichi Sasada2020-09-031-0/+162
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.