concur 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.markdown ADDED
@@ -0,0 +1 @@
1
+ # Concur - A concurrency library for Ruby like java.util.concurrency
data/lib/concur.rb ADDED
@@ -0,0 +1,3 @@
1
+
2
+ require_relative 'executor'
3
+ require_relative 'executor'
data/lib/executor.rb ADDED
@@ -0,0 +1,10 @@
1
+ require_relative 'runnable'
2
+ require_relative 'future'
3
+
4
+ module Concur
5
+ class Executor
6
+ def queue(runnable)
7
+ Future.new(runnable)
8
+ end
9
+ end
10
+ end
data/lib/future.rb ADDED
@@ -0,0 +1,28 @@
1
+ =begin
2
+ An Future is a class that captures the results of a threaded object so you can retreive these results later.
3
+
4
+ Example usage:
5
+
6
+ searcher = Searcher.new
7
+ # todo: not sure if this will be usage in the end.... but
8
+ future = Future.new(searcher)
9
+ do_some_other_stuff_in_the_meantime()
10
+ search_results = future.get
11
+
12
+ `get` retrieves the results.
13
+ =end
14
+ module Concur
15
+ class Future
16
+ def initialize(runnable)
17
+ @thread = Thread.new do
18
+ @result = runnable.run
19
+ end
20
+ end
21
+
22
+ # Returns results. Will wait for thread to complete execution if not already complete.
23
+ def get
24
+ @thread.join
25
+ @result
26
+ end
27
+ end
28
+ end
data/lib/runnable.rb ADDED
@@ -0,0 +1,10 @@
1
+
2
+ # A mixin for runnable classes.
3
+
4
+ module Concur
5
+ module Runnable
6
+ def run
7
+ raise "No run method defined in your runable!"
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,37 @@
1
+ require 'rspec'
2
+
3
+ require_relative '../lib/executor'
4
+ require_relative 'job'
5
+
6
+ describe Concur::Executor do
7
+ describe "#score" do
8
+ it "runs faster in parallel" do
9
+ start_time = Time.now
10
+ 20.times do |i|
11
+ job = Job.new(i)
12
+ job.run
13
+ end
14
+ non_concurrent_duration = Time.now - start_time
15
+ puts "duration=" + non_concurrent_duration.to_s
16
+
17
+ puts
18
+
19
+ puts "Now for concurrent"
20
+ executor = Concur::Executor.new
21
+ start_time = Time.now
22
+ jobs = []
23
+ 20.times do |i|
24
+ job = Job.new(i)
25
+ future = executor.queue(job)
26
+ jobs << future
27
+ end
28
+ jobs.each do |j|
29
+ puts "uber fast result=#{j.get}"
30
+ end
31
+ concurrent_duration = Time.now - start_time
32
+ puts "duration=" + concurrent_duration .to_s
33
+
34
+ concurrent_duration.should be < (non_concurrent_duration-2)
35
+ end
36
+ end
37
+ end
data/test/job.rb ADDED
@@ -0,0 +1,16 @@
1
+ require_relative '../lib/runnable'
2
+
3
+ class Job
4
+ include Concur::Runnable
5
+
6
+ def initialize(i)
7
+ @i = i
8
+ end
9
+
10
+ def run
11
+ sleep 0.25
12
+ puts "#{@i} finished"
13
+ "response #{@i}"
14
+ end
15
+
16
+ end
metadata ADDED
@@ -0,0 +1,56 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: concur
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Travis Reeder
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-02-23 00:00:00.000000000 -08:00
13
+ default_executable:
14
+ dependencies: []
15
+ description: A concurrency library for Ruby like java.util.concurrency By http://www.appoxy.com
16
+ email: travis@appoxy.com
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files:
20
+ - README.markdown
21
+ files:
22
+ - lib/concur.rb
23
+ - lib/executor.rb
24
+ - lib/future.rb
25
+ - lib/runnable.rb
26
+ - README.markdown
27
+ - test/executor_spec.rb
28
+ - test/job.rb
29
+ has_rdoc: true
30
+ homepage: http://github.com/appoxy/concur/
31
+ licenses: []
32
+ post_install_message:
33
+ rdoc_options: []
34
+ require_paths:
35
+ - lib
36
+ required_ruby_version: !ruby/object:Gem::Requirement
37
+ none: false
38
+ requirements:
39
+ - - ! '>='
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ required_rubygems_version: !ruby/object:Gem::Requirement
43
+ none: false
44
+ requirements:
45
+ - - ! '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ requirements: []
49
+ rubyforge_project:
50
+ rubygems_version: 1.5.2
51
+ signing_key:
52
+ specification_version: 3
53
+ summary: A concurrency library for Ruby like java.util.concurrency. By http://www.appoxy.com
54
+ test_files:
55
+ - test/executor_spec.rb
56
+ - test/job.rb