rbgo 0.1.7 → 0.1.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f1d1880a27af4ea7ffc1df205faeb5c75375a12d789561dc1c473c896bdeba3f
4
- data.tar.gz: 0ced0a1fd53991926e51e0b5f5875bd98b8bc50a10f4d566d4925cfdc866bfdc
3
+ metadata.gz: 113f0668f29ce9c2cc2bf6b030dc8595b48b568a33f6d6767009e5f636a781e5
4
+ data.tar.gz: 7b99d3977185488a7727afed6f0c36d4a1721cd0514e497d3a315277a4b1f76f
5
5
  SHA512:
6
- metadata.gz: 280411acaadb9892561c71a6cd8f61e76f96b88b03ced64b9bdbebca7984c4b9c7c8cd62c7fdd3491f30a6ac12b9e0414d227d3da94c29dcb69e6875d46cd380
7
- data.tar.gz: c28d1721ed1cdbdf91702d244789f96cd4ef8071ae7b0b24f64b57c8f672fabbb6a0697bd7255db614c3401e59b1fb09ff6665f96b8166b5f8398333eb4499c7
6
+ metadata.gz: 9bed3889fec534a3bebad351ad0949b46ef56ad643a671666e5f9ce2eea0a1d4fb1338ff1523ac1e08e72ff820c15cae06150b2aab3b591a9a2221ed84111da2
7
+ data.tar.gz: e67e9b0dcedd5fcc3dbf9be97b04dee673da76b8cc0307df4aab938b01cb3b37e00ed4d7fc775bc1613479a1f10c182eb78e992b2ff0dc3cf6843107338cd10a
data/README.md CHANGED
@@ -82,6 +82,16 @@ end
82
82
  wg.wait
83
83
  puts 'wg.wait done'
84
84
 
85
+ go! do
86
+
87
+ # go! force a new thread be created to handle this block, and exit when finish.
88
+ # use go! to do blocking operations
89
+
90
+ end
91
+
92
+
93
+
94
+
85
95
  ```
86
96
  # NetworkService
87
97
 
data/lib/rbgo/corun.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  require 'thread'
2
2
  require 'fiber'
3
- require 'sys-cpu'
3
+ require 'system'
4
4
  require 'singleton'
5
5
 
6
6
  module Rbgo
@@ -18,10 +18,27 @@ module Rbgo
18
18
 
19
19
  attr_accessor :args, :blk, :fiber
20
20
 
21
- def initialize(*args, &blk)
21
+ def initialize(*args, new_thread: false, &blk)
22
22
  self.args = args
23
23
  self.blk = blk
24
- Scheduler.instance.schedule(self)
24
+ if new_thread
25
+ Thread.new do
26
+ self.fiber = Fiber.new do |args|
27
+ blk.call(*args)
28
+ end
29
+
30
+ begin
31
+ while fiber.alive?
32
+ fiber.resume(*args)
33
+ end
34
+ rescue Exception => ex
35
+ self.error = ex
36
+ end
37
+ end
38
+
39
+ else
40
+ Scheduler.instance.schedule(self)
41
+ end
25
42
  end
26
43
 
27
44
  def perform
@@ -49,7 +66,7 @@ module Rbgo
49
66
  attr_accessor :supervisor_thread
50
67
 
51
68
  def initialize
52
- self.num_thread = Sys::CPU.num_cpu
69
+ self.num_thread = System::CPU.count || 8
53
70
  self.thread_pool = []
54
71
 
55
72
  self.msg_queue = Queue.new
@@ -188,7 +205,11 @@ module Rbgo
188
205
  module CoRunExtensions
189
206
  refine Object do
190
207
  def go(*args, &blk)
191
- CoRun::Routine.new(*args, &blk)
208
+ CoRun::Routine.new(*args, new_thread: false, &blk)
209
+ end
210
+
211
+ def go!(*args, &blk)
212
+ CoRun::Routine.new(*args, new_thread: true, &blk)
192
213
  end
193
214
  end
194
215
  end
data/lib/rbgo/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Rbgo
2
- VERSION = "0.1.7"
2
+ VERSION = "0.1.8"
3
3
  end
data/rbgo.gemspec CHANGED
@@ -19,7 +19,7 @@ Gem::Specification.new do |s|
19
19
 
20
20
  In MRI write program to run concurrently even not parallelly is also important.
21
21
  END
22
- s.add_dependency "sys-cpu", "~> 0.8"
22
+ s.add_dependency "system", "~> 0.1.3"
23
23
  s.files = `git ls-files`.split("\n")
24
24
  s.license = 'MIT'
25
25
  end
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbgo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Wang Yin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-08-04 00:00:00.000000000 Z
11
+ date: 2019-08-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: sys-cpu
14
+ name: system
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.8'
19
+ version: 0.1.3
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0.8'
26
+ version: 0.1.3
27
27
  description: " Write concurrent program with Ruby in Golang style.
28
28
  \ \n\n You can produce a light weight routine easily with a method
29
29
  'go' and communicate with each routine by channel.\n\n In MRI
@@ -39,7 +39,6 @@ extra_rdoc_files: []
39
39
  files:
40
40
  - ".gitignore"
41
41
  - Gemfile
42
- - Gemfile.lock
43
42
  - LICENSE
44
43
  - README.md
45
44
  - lib/rbgo.rb
data/Gemfile.lock DELETED
@@ -1,21 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- rbgo (0.1.6)
5
- sys-cpu (~> 0.8)
6
-
7
- GEM
8
- remote: http://rubygems.org/
9
- specs:
10
- ffi (1.11.1)
11
- sys-cpu (0.8.0)
12
- ffi
13
-
14
- PLATFORMS
15
- ruby
16
-
17
- DEPENDENCIES
18
- rbgo!
19
-
20
- BUNDLED WITH
21
- 2.0.2