@@ -224,6 +224,34 @@ be obeyed though. Features developed in `concurrent-ruby-edge` are expected to m
224
224
* Status: will be moved to core soon.*
225
225
* [ LockFreeStack] ( http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/LockFreeStack.html )
226
226
* Status: missing documentation and tests.*
227
+ * [ Promises::Channel] ( http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Promises/Channel.html )
228
+ A first in first out channel that accepts messages with push family of methods and returns
229
+ messages with pop family of methods.
230
+ Pop and push operations can be represented as futures, see {#pop_op} and {#push_op}.
231
+ The capacity of the channel can be limited to support back pressure, use capacity option in {#initialize}.
232
+ {#pop} method blocks ans {#pop_op} returns pending future if there is no message in the channel.
233
+ If the capacity is limited the {#push} method blocks and {#push_op} returns pending future.
234
+ * [ Cancellation] ( http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Cancellation.html )
235
+ The Cancellation abstraction provides cooperative cancellation.
236
+
237
+ The standard methods ` Thread#raise ` of ` Thread#kill ` available in Ruby
238
+ are very dangerous (see linked the blog posts bellow).
239
+ Therefore concurrent-ruby provides an alternative.
240
+
241
+ * < https://jvns.ca/blog/2015/11/27/why-rubys-timeout-is-dangerous-and-thread-dot-raise-is-terrifying/ >
242
+ * < http://www.mikeperham.com/2015/05/08/timeout-rubys-most-dangerous-api/ >
243
+ * < http://blog.headius.com/2008/02/rubys-threadraise-threadkill-timeoutrb.html >
244
+
245
+ It provides an object which represents a task which can be executed,
246
+ the task has to get the reference to the object and periodically cooperatively check that it is not cancelled.
247
+ Good practices to make tasks cancellable:
248
+ * check cancellation every cycle of a loop which does significant work,
249
+ * do all blocking actions in a loop with a timeout then on timeout check cancellation
250
+ and if ok block again with the timeout
251
+ * [ Throttle] ( http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Throttle.html )
252
+ A tool managing concurrency level of tasks.
253
+ * [ ErlangActor] ( http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/ErlangActor.html )
254
+ Actor implementation which matches Erlang actor behaviour.
227
255
228
256
## Supported Ruby versions
229
257
0 commit comments