asynchronous 0.1.0 → 0.1.1

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.
data/README.md CHANGED
@@ -2,7 +2,58 @@ asynchronous
2
2
  ============
3
3
 
4
4
  Asynchronous Patterns for Ruby Based on Pure MRI CRuby code
5
+ The goal is to use the original MRI C libs for achive
6
+ real async patterns in ruby
5
7
 
8
+ Well it is achived...
9
+
10
+
11
+ # OS managed thread
12
+
13
+ copy on write memory share,
14
+ so you cant change anything in the mother process
15
+ only with the return value later.
16
+ This method is stronger the more CPU core the os have
17
+
18
+ Ideal for Big jobs that require lot of memory allocation or
19
+ heavy CPU load to get a value
20
+ Like parsing (in some case)
21
+
22
+ ```ruby
23
+
24
+ calculation = async :parallelism do
25
+
26
+ sleep 4
27
+ # remember, everything you
28
+ # write here only mather in this block
29
+ # will not affect the real process only
30
+ # the last return value of the block
31
+ 4 * 5
32
+
33
+ end
34
+
35
+ # to call the value (syncronize):
36
+ calculation.value
37
+
38
+ ```
39
+
40
+ # VM managed thread
41
+
42
+ you can use simple :c also instead of :concurrency as sym,
43
+ remember :concurrency is all about GIL case, so
44
+ you can modify the objects in memory
45
+ This is ideal for little operations in simultaneously or
46
+ when you need to update objects in the memory and not the
47
+ return value what is mather.
48
+ Remember well that GarbageCollector will affect the speed.
49
+
50
+ ```ruby
51
+
52
+ calculation= async { sleep 3; 4 * 3 }
53
+ # to call the value (syncronize):
54
+ calculation.value
55
+
56
+ ```
6
57
  # Examples
7
58
 
8
59
  the "simple async processing" will let you use os threads (1.9.n+)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.1.1
@@ -10,13 +10,20 @@ module Asynchronous
10
10
  def initialize(callable)
11
11
  begin
12
12
  @value= nil
13
+ @try_count= 0
13
14
  @rescue_state= nil
14
15
  @thread ||= ::Thread.new { callable.call }
15
16
  @rescue_state= nil
16
17
  rescue ThreadError
17
18
  @rescue_state ||= true
18
- sleep 5
19
- retry
19
+ @try_count += 1
20
+ if 3 <= @try_count
21
+ @value= callable.call
22
+ @rescue_state= nil
23
+ else
24
+ sleep 5
25
+ retry
26
+ end
20
27
  end
21
28
  end
22
29
 
@@ -11,8 +11,6 @@ module Asynchronous
11
11
 
12
12
  # Basic
13
13
  begin
14
-
15
- #require 'yaml'
16
14
  @@pids=[]
17
15
  def initialize callable
18
16
 
@@ -33,7 +31,6 @@ module Asynchronous
33
31
  @@pids.push(@pid)
34
32
 
35
33
  end
36
-
37
34
  end
38
35
 
39
36
  # return value
@@ -56,22 +53,13 @@ module Asynchronous
56
53
 
57
54
  end
58
55
 
59
-
60
56
  def value=(obj)
61
57
  @value= obj
62
58
  end
63
59
 
64
- #def method_missing(method,*args)
65
- # value.__send__(method,*args)
66
- #end
67
- #
68
- #def respond_to_missing?(method, include_private = false)
69
- # value.respond_to?(method, include_private)
70
- #end
71
-
72
60
  end
73
61
 
74
- # kill Zombies at Kernel Exit
62
+ # kill kidos at Kernel Exit
75
63
  begin
76
64
  ::Kernel.at_exit {
77
65
  @@pids.each { |pid|
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: asynchronous
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-01-10 00:00:00.000000000 Z
12
+ date: 2014-01-11 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: ! 'Async dsl for easy concurrency patterns in both VM managed and OS
15
15
  managed way (Concurrency and Parallelism) '