concurrent-ruby 0.7.0-x86-linux → 0.7.1-x86-linux
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +8 -8
- data/CHANGELOG.md +138 -0
- data/README.md +73 -105
- data/lib/1.9/concurrent_ruby_ext.so +0 -0
- data/lib/2.0/concurrent_ruby_ext.so +0 -0
- data/lib/concurrent/actor.rb +11 -12
- data/lib/concurrent/actor/behaviour/errors_on_unknown_message.rb +1 -1
- data/lib/concurrent/actor/behaviour/linking.rb +4 -1
- data/lib/concurrent/actor/behaviour/pausing.rb +2 -2
- data/lib/concurrent/actor/behaviour/supervised.rb +2 -1
- data/lib/concurrent/actor/behaviour/termination.rb +1 -1
- data/lib/concurrent/actor/context.rb +2 -1
- data/lib/concurrent/actor/core.rb +7 -3
- data/lib/concurrent/actor/utils/balancer.rb +4 -2
- data/lib/concurrent/actor/utils/pool.rb +1 -1
- data/lib/concurrent/agent.rb +1 -22
- data/lib/concurrent/async.rb +1 -79
- data/lib/concurrent/atomic.rb +1 -1
- data/lib/concurrent/atomic/thread_local_var.rb +71 -24
- data/lib/concurrent/atomics.rb +0 -1
- data/lib/concurrent/configuration.rb +11 -5
- data/lib/concurrent/dataflow.rb +1 -30
- data/lib/concurrent/dereferenceable.rb +9 -2
- data/lib/concurrent/executor/indirect_immediate_executor.rb +46 -0
- data/lib/concurrent/executor/java_thread_pool_executor.rb +2 -4
- data/lib/concurrent/executor/ruby_thread_pool_executor.rb +24 -22
- data/lib/concurrent/executor/thread_pool_executor.rb +2 -0
- data/lib/concurrent/executor/timer_set.rb +7 -8
- data/lib/concurrent/executors.rb +1 -0
- data/lib/concurrent/future.rb +7 -29
- data/lib/concurrent/ivar.rb +9 -0
- data/lib/concurrent/logging.rb +3 -0
- data/lib/concurrent/mvar.rb +26 -9
- data/lib/concurrent/observable.rb +33 -0
- data/lib/concurrent/promise.rb +59 -1
- data/lib/concurrent/scheduled_task.rb +1 -0
- data/lib/concurrent/timer_task.rb +18 -18
- data/lib/concurrent/tvar.rb +2 -0
- data/lib/concurrent/version.rb +1 -1
- data/lib/concurrent_ruby_ext.so +0 -0
- metadata +21 -4
| @@ -10,7 +10,7 @@ module Concurrent | |
| 10 10 | 
             
              # intervals. The thread that performs the task sleeps for the given interval then
         | 
| 11 11 | 
             
              # wakes up and performs the task. Lather, rinse, repeat... This pattern causes two
         | 
| 12 12 | 
             
              # problems. First, it is difficult to test the business logic of the task because the
         | 
| 13 | 
            -
              # task itself is tightly coupled with the concurrency logic. Second, an exception | 
| 13 | 
            +
              # task itself is tightly coupled with the concurrency logic. Second, an exception
         | 
| 14 14 | 
             
              # raised while performing the task can cause the entire thread to abend. In a
         | 
| 15 15 | 
             
              # long-running application where the task thread is intended to run for days/weeks/years
         | 
| 16 16 | 
             
              # a crashed task thread can pose a significant problem. `TimerTask` alleviates both problems.
         | 
| @@ -23,13 +23,13 @@ module Concurrent | |
| 23 23 | 
             
              # performing logging or ancillary operations. `TimerTask` can also be configured with a
         | 
| 24 24 | 
             
              # timeout value allowing it to kill a task that runs too long.
         | 
| 25 25 | 
             
              # 
         | 
| 26 | 
            -
              # One other advantage of `TimerTask` is it forces the business logic to be completely decoupled
         | 
| 26 | 
            +
              # One other advantage of `TimerTask` is that it forces the business logic to be completely decoupled
         | 
| 27 27 | 
             
              # from the concurrency logic. The business logic can be tested separately then passed to the
         | 
| 28 28 | 
             
              # `TimerTask` for scheduling and running.
         | 
| 29 29 | 
             
              # 
         | 
| 30 30 | 
             
              # In some cases it may be necessary for a `TimerTask` to affect its own execution cycle.
         | 
| 31 | 
            -
              # To facilitate this a reference to the  | 
| 32 | 
            -
              #  | 
| 31 | 
            +
              # To facilitate this, a reference to the TimerTask instance is passed as an argument
         | 
| 32 | 
            +
              # to the provided block every time the task is executed.
         | 
| 33 33 | 
             
              # 
         | 
| 34 34 | 
             
              # The `TimerTask` class includes the `Dereferenceable` mixin module so the result of
         | 
| 35 35 | 
             
              # the last execution is always available via the `#value` method. Derefencing options
         | 
| @@ -39,13 +39,13 @@ module Concurrent | |
| 39 39 | 
             
              # `TimerTask` supports notification through the Ruby standard library
         | 
| 40 40 | 
             
              # {http://ruby-doc.org/stdlib-2.0/libdoc/observer/rdoc/Observable.html Observable}
         | 
| 41 41 | 
             
              # module. On execution the `TimerTask` will notify the observers
         | 
| 42 | 
            -
              # with  | 
| 42 | 
            +
              # with three arguments: time of execution, the result of the block (or nil on failure),
         | 
| 43 43 | 
             
              # and any raised exceptions (or nil on success). If the timeout interval is exceeded
         | 
| 44 44 | 
             
              # the observer will receive a `Concurrent::TimeoutError` object as the third argument.
         | 
| 45 45 | 
             
              #
         | 
| 46 46 | 
             
              # @example Basic usage
         | 
| 47 47 | 
             
              #   task = Concurrent::TimerTask.new{ puts 'Boom!' }
         | 
| 48 | 
            -
              #   task. | 
| 48 | 
            +
              #   task.execute
         | 
| 49 49 | 
             
              #   
         | 
| 50 50 | 
             
              #   task.execution_interval #=> 60 (default)
         | 
| 51 51 | 
             
              #   task.timeout_interval   #=> 30 (default)
         | 
| @@ -53,7 +53,7 @@ module Concurrent | |
| 53 53 | 
             
              #   # wait 60 seconds...
         | 
| 54 54 | 
             
              #   #=> 'Boom!'
         | 
| 55 55 | 
             
              #   
         | 
| 56 | 
            -
              #   task. | 
| 56 | 
            +
              #   task.shutdown #=> true
         | 
| 57 57 | 
             
              #
         | 
| 58 58 | 
             
              # @example Configuring `:execution_interval` and `:timeout_interval`
         | 
| 59 59 | 
             
              #   task = Concurrent::TimerTask.new(execution_interval: 5, timeout_interval: 5) do
         | 
| @@ -65,7 +65,7 @@ module Concurrent | |
| 65 65 | 
             
              #
         | 
| 66 66 | 
             
              # @example Immediate execution with `:run_now`
         | 
| 67 67 | 
             
              #   task = Concurrent::TimerTask.new(run_now: true){ puts 'Boom!' }
         | 
| 68 | 
            -
              #   task. | 
| 68 | 
            +
              #   task.execute
         | 
| 69 69 | 
             
              #   
         | 
| 70 70 | 
             
              #   #=> 'Boom!'
         | 
| 71 71 | 
             
              #
         | 
| @@ -75,7 +75,7 @@ module Concurrent | |
| 75 75 | 
             
              #     execution_interval: 5
         | 
| 76 76 | 
             
              #   ){ Time.now }
         | 
| 77 77 | 
             
              #   
         | 
| 78 | 
            -
              #   task. | 
| 78 | 
            +
              #   task.execute
         | 
| 79 79 | 
             
              #   Time.now   #=> 2013-11-07 18:06:50 -0500
         | 
| 80 80 | 
             
              #   sleep(10)
         | 
| 81 81 | 
             
              #   task.value #=> 2013-11-07 18:06:55 -0500
         | 
| @@ -87,11 +87,11 @@ module Concurrent | |
| 87 87 | 
             
              #     task.execution_interval += 1
         | 
| 88 88 | 
             
              #     if task.execution_interval > 5
         | 
| 89 89 | 
             
              #       puts 'Stopping...'
         | 
| 90 | 
            -
              #       task. | 
| 90 | 
            +
              #       task.shutdown
         | 
| 91 91 | 
             
              #     end
         | 
| 92 92 | 
             
              #   end
         | 
| 93 93 | 
             
              #   
         | 
| 94 | 
            -
              #   timer_task. | 
| 94 | 
            +
              #   timer_task.execute # blocking call - this task will stop itself
         | 
| 95 95 | 
             
              #   #=> Boom!
         | 
| 96 96 | 
             
              #   #=> Boom! Boom!
         | 
| 97 97 | 
             
              #   #=> Boom! Boom! Boom!
         | 
| @@ -114,30 +114,30 @@ module Concurrent | |
| 114 114 | 
             
              #   
         | 
| 115 115 | 
             
              #   task = Concurrent::TimerTask.new(execution_interval: 1, timeout_interval: 1){ 42 }
         | 
| 116 116 | 
             
              #   task.add_observer(TaskObserver.new)
         | 
| 117 | 
            -
              #   task. | 
| 117 | 
            +
              #   task.execute
         | 
| 118 118 | 
             
              #   
         | 
| 119 119 | 
             
              #   #=> (2013-10-13 19:08:58 -0400) Execution successfully returned 42
         | 
| 120 120 | 
             
              #   #=> (2013-10-13 19:08:59 -0400) Execution successfully returned 42
         | 
| 121 121 | 
             
              #   #=> (2013-10-13 19:09:00 -0400) Execution successfully returned 42
         | 
| 122 | 
            -
              #   task. | 
| 122 | 
            +
              #   task.shutdown
         | 
| 123 123 | 
             
              #   
         | 
| 124 124 | 
             
              #   task = Concurrent::TimerTask.new(execution_interval: 1, timeout_interval: 1){ sleep }
         | 
| 125 125 | 
             
              #   task.add_observer(TaskObserver.new)
         | 
| 126 | 
            -
              #   task. | 
| 126 | 
            +
              #   task.execute
         | 
| 127 127 | 
             
              #   
         | 
| 128 128 | 
             
              #   #=> (2013-10-13 19:07:25 -0400) Execution timed out
         | 
| 129 129 | 
             
              #   #=> (2013-10-13 19:07:27 -0400) Execution timed out
         | 
| 130 130 | 
             
              #   #=> (2013-10-13 19:07:29 -0400) Execution timed out
         | 
| 131 | 
            -
              #   task. | 
| 131 | 
            +
              #   task.shutdown
         | 
| 132 132 | 
             
              #   
         | 
| 133 133 | 
             
              #   task = Concurrent::TimerTask.new(execution_interval: 1){ raise StandardError }
         | 
| 134 134 | 
             
              #   task.add_observer(TaskObserver.new)
         | 
| 135 | 
            -
              #   task. | 
| 135 | 
            +
              #   task.execute
         | 
| 136 136 | 
             
              #   
         | 
| 137 137 | 
             
              #   #=> (2013-10-13 19:09:37 -0400) Execution failed with error StandardError
         | 
| 138 138 | 
             
              #   #=> (2013-10-13 19:09:38 -0400) Execution failed with error StandardError
         | 
| 139 139 | 
             
              #   #=> (2013-10-13 19:09:39 -0400) Execution failed with error StandardError
         | 
| 140 | 
            -
              #   task. | 
| 140 | 
            +
              #   task.shutdown
         | 
| 141 141 | 
             
              #
         | 
| 142 142 | 
             
              # @see http://ruby-doc.org/stdlib-2.0/libdoc/observer/rdoc/Observable.html
         | 
| 143 143 | 
             
              # @see http://docs.oracle.com/javase/7/docs/api/java/util/TimerTask.html
         | 
| @@ -316,7 +316,7 @@ module Concurrent | |
| 316 316 | 
             
                # @!visibility private
         | 
| 317 317 | 
             
                def execute_task(completion)
         | 
| 318 318 | 
             
                  return unless @running.true?
         | 
| 319 | 
            -
                  Concurrent::timer( | 
| 319 | 
            +
                  Concurrent::timer(execution_interval, completion, &method(:timeout_task))
         | 
| 320 320 | 
             
                  success, value, reason = @executor.execute(self)
         | 
| 321 321 | 
             
                  if completion.try?
         | 
| 322 322 | 
             
                    self.value = value
         | 
    
        data/lib/concurrent/tvar.rb
    CHANGED
    
    
    
        data/lib/concurrent/version.rb
    CHANGED
    
    
    
        data/lib/concurrent_ruby_ext.so
    CHANGED
    
    | Binary file | 
    
        metadata
    CHANGED
    
    | @@ -1,15 +1,29 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: concurrent-ruby
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.7. | 
| 4 | 
            +
              version: 0.7.1
         | 
| 5 5 | 
             
            platform: x86-linux
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Jerry D'Antonio
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2014- | 
| 12 | 
            -
            dependencies: | 
| 11 | 
            +
            date: 2014-12-05 00:00:00.000000000 Z
         | 
| 12 | 
            +
            dependencies:
         | 
| 13 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 14 | 
            +
              name: ref
         | 
| 15 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 16 | 
            +
                requirements:
         | 
| 17 | 
            +
                - - ~>
         | 
| 18 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            +
                    version: 1.0.5
         | 
| 20 | 
            +
              type: :runtime
         | 
| 21 | 
            +
              prerelease: false
         | 
| 22 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 23 | 
            +
                requirements:
         | 
| 24 | 
            +
                - - ~>
         | 
| 25 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 26 | 
            +
                    version: 1.0.5
         | 
| 13 27 | 
             
            description: ! "    Modern concurrency tools including agents, futures, promises,
         | 
| 14 28 | 
             
              thread pools, actors, supervisors, and more.\n    Inspired by Erlang, Clojure, Go,
         | 
| 15 29 | 
             
              JavaScript, actors, and classic concurrency patterns.\n"
         | 
| @@ -19,7 +33,9 @@ extensions: [] | |
| 19 33 | 
             
            extra_rdoc_files:
         | 
| 20 34 | 
             
            - README.md
         | 
| 21 35 | 
             
            - LICENSE.txt
         | 
| 36 | 
            +
            - CHANGELOG.md
         | 
| 22 37 | 
             
            files:
         | 
| 38 | 
            +
            - CHANGELOG.md
         | 
| 23 39 | 
             
            - LICENSE.txt
         | 
| 24 40 | 
             
            - README.md
         | 
| 25 41 | 
             
            - ext/concurrent_ruby_ext/atomic_boolean.c
         | 
| @@ -105,6 +121,7 @@ files: | |
| 105 121 | 
             
            - lib/concurrent/executor/executor.rb
         | 
| 106 122 | 
             
            - lib/concurrent/executor/fixed_thread_pool.rb
         | 
| 107 123 | 
             
            - lib/concurrent/executor/immediate_executor.rb
         | 
| 124 | 
            +
            - lib/concurrent/executor/indirect_immediate_executor.rb
         | 
| 108 125 | 
             
            - lib/concurrent/executor/java_cached_thread_pool.rb
         | 
| 109 126 | 
             
            - lib/concurrent/executor/java_fixed_thread_pool.rb
         | 
| 110 127 | 
             
            - lib/concurrent/executor/java_single_thread_executor.rb
         | 
| @@ -161,7 +178,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 161 178 | 
             
                  version: '0'
         | 
| 162 179 | 
             
            requirements: []
         | 
| 163 180 | 
             
            rubyforge_project: 
         | 
| 164 | 
            -
            rubygems_version: 2. | 
| 181 | 
            +
            rubygems_version: 2.4.4
         | 
| 165 182 | 
             
            signing_key: 
         | 
| 166 183 | 
             
            specification_version: 4
         | 
| 167 184 | 
             
            summary: Modern concurrency tools for Ruby. Inspired by Erlang, Clojure, Scala, Haskell,
         |