3838### Supported Ruby versions
3939
4040MRI 1.9.3, 2.0, 2.1, JRuby (1.9 mode), and Rubinius 2.x are supported.
41- Although native code is used for performance optimizations on some platforms, all functionality
42- is available in pure Ruby. This gem should be fully compatible with any interpreter that is
43- compliant with Ruby 1.9.3 or newer.
41+ This gem should be fully compatible with any interpreter that is compliant with Ruby 1.9.3 or newer.
4442
4543## Features & Documentation
4644
@@ -62,6 +60,7 @@ This library contains a variety of concurrency abstractions at high and low leve
6260* [ Promise] ( http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/Promise.html ) : Similar to Futures, with more features.
6361* [ ScheduledTask] ( http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/ScheduledTask.html ) : Like a Future scheduled for a specific future time.
6462* [ TimerTask] ( http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/TimerTask.html ) : A Thread that periodically wakes up to perform work at regular intervals.
63+ * [ Channel] ( http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/Channel.html ) : Communicating Sequential Processes (CSP).
6564
6665### Java-inspired ThreadPools and other executors
6766
@@ -98,28 +97,45 @@ Lower-level abstractions mainly used as building blocks.
9897* [ thread-local variables] ( http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/ThreadLocalVar.html )
9998* [ software transactional memory] ( http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/TVar.html ) (TVar)
10099
101- ## Installing and Building
100+ ## Usage
102101
103- This gem includes several platform-specific optimizations. To reduce the possibility of
104- compilation errors, we provide pre-compiled gem packages for several platforms as well
105- as a pure-Ruby build. Installing the gem should be no different than installing any other
106- Rubygems-hosted gem. Rubygems will automatically detect your platform and install the
107- appropriate pre-compiled build. You should never see Rubygems attempt to compile the gem
108- on installation. Additionally, to ensure compatability with the largest possible number
109- of Ruby interpreters, the C extensions will * never* load under any Ruby other than MRI,
110- even when installed.
102+ All abstractions within this gem can be loaded simply by requiring it:
111103
112- The following gem builds will be built at every release:
104+ ``` ruby
105+ require ' concurrent'
106+ ```
113107
114- * concurrent-ruby-x.y.z.gem (pure Ruby)
115- * concurrent-ruby-x.y.z-java.gem (JRuby)
116- * concurrent-ruby-x.y.z-x86-linux.gem (Linux 32-bit)
117- * concurrent-ruby-x.y.z-x86_64-linux.gem (Linux 64-bit)
118- * concurrent-ruby-x.y.z-x86-mingw32.gem (Windows 32-bit)
119- * concurrent-ruby-x.y.z-x64-mingw32.gem (Windows 64-bit)
120- * concurrent-ruby-x.y.z-x86-solaris-2.11.gem (Solaris)
108+ To reduce the amount of code loaded at runtime, subsets of this gem can be required:
121109
122- ### Installing
110+ ``` ruby
111+ require ' concurrent' # everything
112+
113+ # groups
114+
115+ require ' concurrent/actor' # Concurrent::Actor and supporting code
116+ require ' concurrent/atomics' # atomic and thread synchronization classes
117+ require ' concurrent/channels' # Concurrent::Channel and supporting code
118+ require ' concurrent/executors' # Thread pools and other executors
119+ require ' concurrent/utilities' # utility methods such as processor count and timers
120+
121+ # individual abstractions
122+
123+ require ' concurrent/agent' # Concurrent::Agent
124+ require ' concurrent/async' # Concurrent::Async
125+ require ' concurrent/atomic' # Concurrent::Atomic (formerly the `atomic` gem)
126+ require ' concurrent/dataflow' # Concurrent::dataflow
127+ require ' concurrent/delay' # Concurrent::Delay
128+ require ' concurrent/exchanger' # Concurrent::Exchanger
129+ require ' concurrent/future' # Concurrent::Future
130+ require ' concurrent/ivar' # Concurrent::IVar
131+ require ' concurrent/mvar' # Concurrent::MVar
132+ require ' concurrent/promise' # Concurrent::Promise
133+ require ' concurrent/scheduled_task' # Concurrent::ScheduledTask
134+ require ' concurrent/timer_task' # Concurrent::TimerTask
135+ require ' concurrent/tvar' # Concurrent::TVar
136+ ```
137+
138+ ## Installation
123139
124140``` shell
125141gem install concurrent-ruby
@@ -133,40 +149,42 @@ gem 'concurrent-ruby'
133149
134150and run ` bundle install ` from your shell.
135151
136- ### Building
152+ ### C Extensions for MRI
137153
138- Because we provide pre-compiled gem builds, users should never need to build the gem manually .
139- The build process for this gem is completely automated using open source tools. All of
140- the automation components are available in the [ ruby-concurrency/rake-compiler-dev-box ] ( https://github.com/ruby-concurrency/rake-compiler-dev-box )
141- GitHub repository.
154+ Potential performance improvements may be achieved under MRI by installing optional C extensions .
155+ To minimize installation errors the C extensions are available in the ` concurrent-ruby-ext ` extension
156+ gem. The extension gem lists ` concurrent-ruby ` as a dependency so it is not necessary to install both.
157+ Simply install the extension gen:
142158
143- This gem will compile native C code under MRI and native Java code under JRuby. It is
144- also possible to build a pure-Ruby version. All builds have identical functionality.
145- The only difference is performance. Additionally, pure-Ruby classes are always available,
146- even when using the native optimizations. Please see the [ documentation] ( http://ruby-concurrency.github.io/concurrent-ruby/ )
147- for more details.
159+ ``` shell
160+ gem install concurrent-ruby-ext
161+ ```
148162
149- To build and package the gem using MRI or JRuby, install the necessary build dependencies and run :
163+ or add the following line to Gemfile :
150164
151- ``` shell
152- bundle exec rake compile
153- bundle exec rake build
165+ ``` ruby
166+ gem ' concurrent-ruby-ext'
154167```
155168
156- To build and package a pure-Ruby gem, on * any* platform and interpreter
157- (including MRI and JRuby), run:
169+ and run ` bundle install ` from your shell.
170+
171+ In code it is only necessary to
158172
159173``` shell
160- BUILD_PURE_RUBY= ' true ' bundle exec rake build
174+ require ' concurrent '
161175```
162176
177+ The ` concurrent-ruby ` gem will automatically detect the presence of the ` concurrent-ruby-ext ` gem
178+ and load the appropriate C extensions.
179+
163180## Maintainers
164181
165182* [ Jerry D'Antonio] ( https://github.com/jdantonio )
166183* [ Michele Della Torre] ( https://github.com/mighe )
167184* [ Chris Seaton] ( https://github.com/chrisseaton )
168185* [ Lucas Allan] ( https://github.com/lucasallan )
169186* [ Petr Chalupa] ( https://github.com/pitr-ch )
187+ * [ Paweł Obrok] ( https://github.com/obrok )
170188
171189### Contributing
172190
0 commit comments