Skip to content

Commit 02a2e88

Browse files
jdantoniopitr-ch
authored andcommitted
Began updating README and CHANGELOG
1 parent 1917c2d commit 02a2e88

File tree

2 files changed

+63
-29
lines changed

2 files changed

+63
-29
lines changed

CHANGELOG.md

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
### Next Release v0.9.0 (Target Date: 5 April 2015)
1+
### Next Release v0.9.0 (Target Date: 7 June 2015)
22

33
* Pure Java implementations of
44
- `AtomicBoolean`
@@ -43,6 +43,31 @@
4343
* Moved global logger up to the `Concurrent` namespace and refactored the code
4444
* Optimized the performance of `Delay`
4545
- Fixed a bug in which no executor option on construction caused block execution on a global thread pool
46+
* Numerous improvements and bug fixes to `TimerSet`
47+
* Fixed deadlock of `Future` when the handler raises Exception
48+
* Added shared specs for more classes
49+
* New concurrency abstractions including:
50+
- `Atom`
51+
- `Maybe`
52+
- `ImmutableStruct`
53+
- `MutableStruct`
54+
- `SettableStruct`
55+
* Created an Edge gem for unstable abstractions including
56+
- `Actor`
57+
- `Agent`
58+
- `Channel`
59+
- `Exchanger`
60+
- `LazyRegister`
61+
* Refactored `Channel` to use newer synchronization objects
62+
* Added `#reset` and `#cancel` methods to `TimerSet`
63+
* Added `#cancel` method to `Future` and `ScheduledTask`
64+
* Refactored `TimerSet` to use `ScheduledTask`
65+
* Updated `Async` with a factory that initializes the object
66+
* Deprecated `Concurrent.timer` and `Concurrent.timeout`
67+
* Reduced max threads on pure-Ruby thread pools (abends around 14751 threads)
68+
* Moved many private/internal classes/modules into "namespace" modules
69+
* Removed brute-force killing of threads in tests
70+
* Fixed a thread pool bug when the operating system cannot allocate more threads
4671

4772
## Current Release v0.8.0 (25 January 2015)
4873

README.md

Lines changed: 37 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# Concurrent Ruby
2-
[![Gem Version](https://badge.fury.io/rb/concurrent-ruby.svg)](http://badge.fury.io/rb/concurrent-ruby) [![Build Status](https://travis-ci.org/ruby-concurrency/concurrent-ruby.svg?branch=master)](https://travis-ci.org/ruby-concurrency/concurrent-ruby) [![Coverage Status](https://img.shields.io/coveralls/ruby-concurrency/concurrent-ruby/master.svg)](https://coveralls.io/r/ruby-concurrency/concurrent-ruby) [![Code Climate](https://codeclimate.com/github/ruby-concurrency/concurrent-ruby.svg)](https://codeclimate.com/github/ruby-concurrency/concurrent-ruby) [![Inline docs](http://inch-ci.org/github/ruby-concurrency/concurrent-ruby.svg)](http://inch-ci.org/github/ruby-concurrency/concurrent-ruby) [![Dependency Status](https://gemnasium.com/ruby-concurrency/concurrent-ruby.svg)](https://gemnasium.com/ruby-concurrency/concurrent-ruby) [![License](https://img.shields.io/badge/license-MIT-green.svg)](http://opensource.org/licenses/MIT) [![Gitter chat](http://img.shields.io/badge/gitter-join%20chat%20%E2%86%92-brightgreen.svg)](https://gitter.im/ruby-concurrency/concurrent-ruby)
2+
[![Gem Version](https://badge.fury.io/rb/concurrent-ruby.svg)](http://badge.fury.io/rb/concurrent-ruby) [![Build Status](https://travis-ci.org/ruby-concurrency/concurrent-ruby.svg?branch=master)](https://travis-ci.org/ruby-concurrency/concurrent-ruby) [![Code Climate](https://codeclimate.com/github/ruby-concurrency/concurrent-ruby.svg)](https://codeclimate.com/github/ruby-concurrency/concurrent-ruby) [![Inline docs](http://inch-ci.org/github/ruby-concurrency/concurrent-ruby.svg)](http://inch-ci.org/github/ruby-concurrency/concurrent-ruby) [![Dependency Status](https://gemnasium.com/ruby-concurrency/concurrent-ruby.svg)](https://gemnasium.com/ruby-concurrency/concurrent-ruby) [![License](https://img.shields.io/badge/license-MIT-green.svg)](http://opensource.org/licenses/MIT) [![Gitter chat](http://img.shields.io/badge/gitter-join%20chat%20%E2%86%92-brightgreen.svg)](https://gitter.im/ruby-concurrency/concurrent-ruby)
33

44
<table>
55
<tr>
@@ -50,7 +50,7 @@ We also have a [mailing list](http://groups.google.com/group/concurrent-ruby).
5050

5151
This library contains a variety of concurrency abstractions at high and low levels. One of the high-level abstractions is likely to meet most common needs.
5252

53-
### High-level, general-purpose asynchronous concurrency abstractions
53+
#### General-purpose Concurrency Abstractions
5454

5555
* [Async](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/Async.html): A mixin module that provides simple asynchronous behavior to any standard class/object or object.
5656
* [Atom](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/Atom.html): A way to manage shared, synchronous, independent state.
@@ -60,40 +60,46 @@ This library contains a variety of concurrency abstractions at high and low leve
6060
* [ScheduledTask](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/ScheduledTask.html): Like a Future scheduled for a specific future time.
6161
* [TimerTask](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/TimerTask.html): A Thread that periodically wakes up to perform work at regular intervals.
6262

63-
### Java-inspired ThreadPools and other executors
63+
#### Thread-safe Value Objects
6464

65-
* See [ThreadPool](http://ruby-concurrency.github.io/concurrent-ruby/file.thread_pools.html) overview, which also contains a list of other Executors available.
65+
* `Maybe` A thread-safe, immutable object representing an optional value, based on
66+
[Haskell Data.Maybe](https://hackage.haskell.org/package/base-4.2.0.1/docs/Data-Maybe.html).
67+
* `Delay` Lazy evaluation of a block yielding an immutable result. Based on Clojure's
68+
[delay](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/Delay.html).
69+
70+
#### Thread-safe Structures
6671

67-
* Thread-safe structure classes derived from Ruby's [Struct](http://ruby-doc.org/core-2.2.0/Struct.html)
72+
Derived from Ruby's [Struct](http://ruby-doc.org/core-2.2.0/Struct.html):
6873

6974
* `ImmutableStruct` Immutable struct where values are set at construction and cannot be changed later.
7075
* `MutableStruct` Synchronized, mutable struct where values can be safely changed at any time.
7176
* `SettableStruct` Synchronized, write-once struct where values can be set at most once, either at construction or any time thereafter.
7277

73-
### Thread synchronization classes and algorithms
78+
#### Java-inspired ThreadPools and Other Executors
79+
80+
* See [ThreadPool](http://ruby-concurrency.github.io/concurrent-ruby/file.thread_pools.html) overview, which also contains a list of other Executors available.
81+
82+
#### Thread Synchronization Classes and Algorithms
7483

7584
* [CountdownLatch](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/CountDownLatch.html)
7685
* [CyclicBarrier](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/CyclicBarrier.html)
7786
* [Event](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/Event.html)
7887
* [Semaphore](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/Semaphore.html)
79-
* [Timeout](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent.html#timeout-class_method)
80-
* [Timer](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent.html#timer-class_method)
8188

82-
### Thread-safe variables
89+
#### Thread-safe Variables
8390

8491
* [AtomicBoolean](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/AtomicBoolean.html)
8592
* [AtomicFixnum](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/AtomicFixnum.html)
8693
* [AtomicReference](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/MutexAtomic.html)
87-
* [Delay](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/Delay.html)
8894
* [I-Structures](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/IVar.html) (IVar)
8995
* [M-Structures](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/MVar.html) (MVar)
9096
* [Thread-local variables](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/ThreadLocalVar.html)
9197
* [Software transactional memory](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/TVar.html) (TVar)
9298
* [ReadWriteLock](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/ReadWriteLock.html)
9399

94-
### Edge features
100+
### Edge Features
95101

96-
They are available in the `concurrent-ruby-edge` companion gem, install with `gem install concurrent-ruby-edge`.
102+
These are available in the `concurrent-ruby-edge` companion gem, installed with `gem install concurrent-ruby-edge`.
97103

98104
These features are under active development and may change frequently. They are expected not to
99105
keep backward compatibility (there may also lack tests and documentation). Semantic versions will
@@ -131,29 +137,32 @@ require 'concurrent' # everything
131137

132138
require 'concurrent/atomics' # atomic and thread synchronization classes
133139
require 'concurrent/executors' # Thread pools and other executors
134-
require 'concurrent/utilities' # utility methods such as processor count and timers
135140

136141
# individual abstractions
137142

138-
require 'concurrent/agent' # Concurrent::Agent
139-
require 'concurrent/async' # Concurrent::Async
140-
require 'concurrent/atomic' # Concurrent::Atomic (formerly the `atomic` gem)
141-
require 'concurrent/dataflow' # Concurrent::dataflow
142-
require 'concurrent/delay' # Concurrent::Delay
143-
require 'concurrent/exchanger' # Concurrent::Exchanger
144-
require 'concurrent/future' # Concurrent::Future
145-
require 'concurrent/ivar' # Concurrent::IVar
146-
require 'concurrent/lazy_register' # Concurrent::LazyRegister
147-
require 'concurrent/mvar' # Concurrent::MVar
148-
require 'concurrent/promise' # Concurrent::Promise
149-
require 'concurrent/scheduled_task' # Concurrent::ScheduledTask
150-
require 'concurrent/timer_task' # Concurrent::TimerTask
151-
require 'concurrent/tvar' # Concurrent::TVar
143+
require 'concurrent/async' # Concurrent::Async
144+
require 'concurrent/atom' # Concurrent::Atom
145+
require 'concurrent/dataflow' # Concurrent::dataflow
146+
require 'concurrent/delay' # Concurrent::Delay
147+
require 'concurrent/future' # Concurrent::Future
148+
require 'concurrent/immutable_struct' # Concurrent::ImmutableStruct
149+
require 'concurrent/ivar' # Concurrent::IVar
150+
require 'concurrent/maybe' # Concurrent::Maybe
151+
require 'concurrent/mutable_struct' # Concurrent::MutableStruct
152+
require 'concurrent/mvar' # Concurrent::MVar
153+
require 'concurrent/promise' # Concurrent::Promise
154+
require 'concurrent/scheduled_task' # Concurrent::ScheduledTask
155+
require 'concurrent/settable_struct' # Concurrent::SettableStruct
156+
require 'concurrent/timer_task' # Concurrent::TimerTask
157+
require 'concurrent/tvar' # Concurrent::TVar
152158

153159
# experimental - available in `concurrent-ruby-edge` companion gem
154160

155161
require 'concurrent/actor' # Concurrent::Actor and supporting code
162+
require 'concurrent/agent' # Concurrent::Agent
156163
require 'concurrent/channel ' # Concurrent::Channel and supporting code
164+
require 'concurrent/exchanger' # Concurrent::Exchanger
165+
require 'concurrent/lazy_register' # Concurrent::LazyRegister
157166
```
158167

159168
If the library does not behave as expected, `Concurrent.use_stdlib_logger(Logger::DEBUG)` could help to revel the problem.
@@ -241,7 +250,7 @@ bundle exec rake compile # Compile all the extensions
241250
* [Petr Chalupa](https://github.com/pitr-ch)
242251
* [Paweł Obrok](https://github.com/obrok)
243252

244-
### Contributing
253+
## Contributing
245254

246255
1. Fork it
247256
2. Create your feature branch (`git checkout -b my-new-feature`)

0 commit comments

Comments
 (0)