asynchronous 3.0.1 → 4.0.0.pre

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.
@@ -1,23 +0,0 @@
1
- require_relative "../lib/asynchronous"
2
-
3
-
4
- async1= async :OS do
5
- 1000000*5
6
- end
7
-
8
- async2= async :OS do
9
-
10
- var = ("sup" * 1000000)
11
- puts "the superHuge String length in the pipe is: #{var.length}"
12
-
13
- var
14
- end
15
-
16
-
17
- async3= async :OS do
18
- 1000000*5.0
19
- end
20
-
21
- puts async1
22
-
23
- puts [ async3, async2[0..5], async1 ]
@@ -1,54 +0,0 @@
1
- require_relative "../lib/asynchronous"
2
-
3
- shared_memory.ruby_worker_jobs= Array.new
4
- shared_memory.static_variables.push :ruby_worker_jobs
5
-
6
- class Worker
7
-
8
- def self.do_some_hard_work! *args
9
-
10
- puts "heavy db load job here with params #{args.inspect}"
11
- #some brutal DB work here
12
-
13
- end
14
-
15
- def self.add_job *array
16
- shared_memory.ruby_worker_jobs.push array
17
- end
18
-
19
- end
20
-
21
-
22
- async :OS do
23
-
24
- loop do
25
-
26
- unless shared_memory.ruby_worker_jobs.empty?
27
-
28
- puts "job to do again..."
29
- job= shared_memory.ruby_worker_jobs.pop
30
-
31
- model_name = job.shift
32
- method_name = job.shift
33
-
34
- model_name.__send__(method_name,*job)
35
-
36
- puts "everything is done, so... nothing to do here... *sigh*"
37
-
38
- else
39
- sleep 0.1
40
- end
41
-
42
-
43
- end
44
-
45
- end
46
-
47
-
48
-
49
- loop do
50
-
51
- sleep 6
52
- Worker.add_job Worker,:do_some_hard_work!,{random: Random.srand}
53
-
54
- end
@@ -1,19 +0,0 @@
1
- require_relative "../lib/asynchronous"
2
-
3
- SharedMemory.test_value= 0
4
- async :OS do
5
-
6
- loop do
7
- SharedMemory.test_value += 1
8
- sleep 3
9
- end
10
-
11
- end
12
-
13
- loop do
14
- if shared_memory.test_value >= 10
15
- Process.exit
16
- end
17
- puts SharedMemory.test_value
18
- sleep 1
19
- end
@@ -1,29 +0,0 @@
1
- require_relative "../lib/asynchronous"
2
-
3
- shared_memory.test_value = Array.new
4
- shared_memory.ready_state = Hash.new
5
- times_value= 5
6
-
7
- times_value.times do
8
-
9
- # remember! IO pipes cant be made too fast!
10
- # this does not mean the Shared memory cant handle the speed
11
-
12
- var= async :OS do
13
-
14
- shared_memory.test_value.push $$
15
- shared_memory.ready_state[$$]= true
16
-
17
- nil
18
- end
19
- shared_memory.ready_state[var.asynchronous_get_pid] ||= false
20
-
21
- end
22
-
23
-
24
- while shared_memory.ready_state.values.include?(false)
25
- sleep 0.5
26
- end
27
-
28
- puts shared_memory.test_value.inspect
29
- puts "#{times_value} OS thread should made this much shared memory update: #{times_value} / and it's #{shared_memory.test_value.count}"
@@ -1,14 +0,0 @@
1
- module Asynchronous
2
- class CleanClass < BasicObject
3
-
4
- # remove methods from the class!
5
- (self.instance_methods-[
6
- :object_id,
7
- :__send__,
8
- :alias,
9
- ]).each do |method|
10
- undef_method method
11
- end
12
-
13
- end
14
- end
@@ -1,214 +0,0 @@
1
- module Asynchronous
2
-
3
- class << self
4
- attr_accessor :global_mutex
5
- end
6
- self.global_mutex = false
7
-
8
- class << self
9
- attr_accessor :memory_allocation_size
10
- end
11
- self.memory_allocation_size= 16384
12
-
13
- module Global
14
-
15
- def self.mutex
16
- @@mutex
17
- end
18
-
19
- @@mutex = ProcessShared::Mutex.new
20
-
21
- end
22
-
23
-
24
- class MemoryObj < Asynchronous::CleanClass
25
-
26
- @data = nil
27
- @mutex = nil
28
-
29
- def initialize(obj)
30
-
31
- @data= ::ProcessShared::SharedMemory.new(
32
- ::Asynchronous.memory_allocation_size)
33
-
34
- @mutex= ::ProcessShared::Mutex.new
35
-
36
- @data.write_object(obj)
37
-
38
- end
39
-
40
- def asynchronous_set_value obj
41
- return @data.write_object obj
42
- end
43
- alias :asynchronous_set_value= :asynchronous_set_value
44
-
45
- def asynchronous_get_value
46
- return @data.read_object
47
- end
48
-
49
- def method_missing(method, *args, &block)
50
-
51
- #::Kernel.puts "method: #{method}, #{args}, #{block}"
52
-
53
- new_value= nil
54
- original_value= nil
55
- return_value= nil
56
- mutex_obj= nil
57
-
58
- if ::Asynchronous.global_mutex == true
59
- mutex_obj= ::Asynchronous::Global.mutex
60
- else
61
- mutex_obj= @mutex
62
- end
63
-
64
- mutex_obj.synchronize do
65
-
66
- new_value= asynchronous_get_value
67
-
68
- begin
69
- original_value= new_value.dup
70
- rescue ::TypeError
71
- original_value= new_value
72
- end
73
-
74
- return_value= new_value.__send__(method,*args,&block)
75
-
76
- unless new_value == original_value
77
- asynchronous_set_value new_value
78
- end
79
-
80
- end
81
-
82
- return return_value
83
-
84
- end
85
-
86
- end
87
-
88
- class SharedMemory < Asynchronous::CleanClass
89
- class << self
90
- def method_missing(method, *args)
91
-
92
- case true
93
-
94
- when method.to_s.include?('=')
95
-
96
- @@static_variables ||= ::Asynchronous::MemoryObj.new(Array.new.push(:static_variables))
97
- if @@static_variables.include?(method.to_s.sub!('=','').to_sym)
98
- $stdout.puts "Warning! static varieble cant be changed without removing from the Asynchronous.static_variables array collection (sym)"
99
- return nil
100
- else
101
-
102
- begin
103
- self.class_variable_get("@@#{method.to_s.sub('=','')}").asynchronous_set_value= args[0]
104
- rescue ::NameError
105
- self.class_variable_set(
106
- "@@#{method.to_s.sub('=','')}",
107
- ::Asynchronous::MemoryObj.new(args[0]))
108
- end
109
-
110
- end
111
-
112
- else
113
- begin
114
- self.class_variable_get("@@#{method.to_s}")
115
- rescue ::NameError
116
- return nil
117
- end
118
- end
119
-
120
- end
121
- end
122
- end
123
-
124
- def self.static_variables
125
- SharedMemory.static_variables
126
- end
127
-
128
- end
129
-
130
- SharedMemory ||= Asynchronous::SharedMemory
131
-
132
-
133
-
134
- =begin
135
-
136
-
137
- # The C void type; only useful for function return types
138
- :void => Type::VOID,
139
-
140
- # C boolean type
141
- :bool => Type::BOOL,
142
-
143
- # C nul-terminated string
144
- :string => Type::STRING,
145
-
146
- # C signed char
147
- :char => Type::CHAR,
148
- # C unsigned char
149
- :uchar => Type::UCHAR,
150
-
151
- # C signed short
152
- :short => Type::SHORT,
153
- # C unsigned short
154
- :ushort => Type::USHORT,
155
-
156
- # C signed int
157
- :int => Type::INT,
158
- # C unsigned int
159
- :uint => Type::UINT,
160
-
161
- # C signed long
162
- :long => Type::LONG,
163
-
164
- # C unsigned long
165
- :ulong => Type::ULONG,
166
-
167
- # C signed long long integer
168
- :long_long => Type::LONG_LONG,
169
-
170
- # C unsigned long long integer
171
- :ulong_long => Type::ULONG_LONG,
172
-
173
- # C single precision float
174
- :float => Type::FLOAT,
175
-
176
- # C double precision float
177
- :double => Type::DOUBLE,
178
-
179
- # C long double
180
- :long_double => Type::LONGDOUBLE,
181
-
182
- # Native memory address
183
- :pointer => Type::POINTER,
184
-
185
- # 8 bit signed integer
186
- :int8 => Type::INT8,
187
- # 8 bit unsigned integer
188
- :uint8 => Type::UINT8,
189
-
190
- # 16 bit signed integer
191
- :int16 => Type::INT16,
192
- # 16 bit unsigned integer
193
- :uint16 => Type::UINT16,
194
-
195
- # 32 bit signed integer
196
- :int32 => Type::INT32,
197
- # 32 bit unsigned integer
198
- :uint32 => Type::UINT32,
199
-
200
- # 64 bit signed integer
201
- :int64 => Type::INT64,
202
- # 64 bit unsigned integer
203
- :uint64 => Type::UINT64,
204
-
205
- :buffer_in => Type::BUFFER_IN,
206
- :buffer_out => Type::BUFFER_OUT,
207
- :buffer_inout => Type::BUFFER_INOUT,
208
-
209
- # Used in function prototypes to indicate the arguments are variadic
210
- :varargs => Type::VARARGS,
211
-
212
-
213
- =end
214
-