polyphony 0.71 → 0.74

Sign up to get free protection for your applications and to get access to all the features.
Files changed (80) hide show
  1. checksums.yaml +4 -4
  2. data/.github/FUNDING.yml +1 -0
  3. data/.github/workflows/test.yml +15 -11
  4. data/.github/workflows/test_io_uring.yml +32 -0
  5. data/.gitignore +3 -1
  6. data/CHANGELOG.md +33 -4
  7. data/Gemfile.lock +16 -13
  8. data/TODO.md +1 -1
  9. data/bin/pdbg +1 -1
  10. data/docs/_user-guide/all-about-timers.md +1 -1
  11. data/docs/api-reference/exception.md +5 -1
  12. data/docs/api-reference/fiber.md +2 -2
  13. data/docs/faq.md +1 -1
  14. data/docs/getting-started/overview.md +8 -8
  15. data/docs/getting-started/tutorial.md +3 -3
  16. data/docs/main-concepts/concurrency.md +1 -1
  17. data/docs/main-concepts/extending.md +3 -3
  18. data/docs/main-concepts/fiber-scheduling.md +1 -1
  19. data/examples/core/calc.rb +37 -0
  20. data/examples/core/calc_with_restart.rb +40 -0
  21. data/examples/core/calc_with_supervise.rb +37 -0
  22. data/examples/core/message_based_supervision.rb +1 -1
  23. data/examples/core/ring.rb +29 -0
  24. data/examples/io/rack_server.rb +1 -1
  25. data/examples/io/tunnel.rb +1 -1
  26. data/examples/performance/fiber_transfer.rb +1 -1
  27. data/examples/performance/line_splitting.rb +1 -1
  28. data/examples/performance/thread-vs-fiber/compare.rb +1 -1
  29. data/ext/polyphony/backend_common.c +88 -18
  30. data/ext/polyphony/backend_common.h +8 -1
  31. data/ext/polyphony/backend_io_uring.c +280 -164
  32. data/ext/polyphony/backend_io_uring_context.c +2 -1
  33. data/ext/polyphony/backend_io_uring_context.h +3 -2
  34. data/ext/polyphony/backend_libev.c +42 -38
  35. data/ext/polyphony/event.c +5 -2
  36. data/ext/polyphony/extconf.rb +25 -13
  37. data/ext/polyphony/polyphony.c +10 -1
  38. data/ext/polyphony/polyphony.h +7 -1
  39. data/ext/polyphony/queue.c +12 -7
  40. data/ext/polyphony/runqueue_ring_buffer.c +6 -3
  41. data/ext/polyphony/socket_extensions.c +5 -2
  42. data/ext/polyphony/thread.c +1 -1
  43. data/lib/polyphony/adapters/irb.rb +11 -1
  44. data/lib/polyphony/{extensions → core}/debug.rb +0 -0
  45. data/lib/polyphony/core/global_api.rb +3 -6
  46. data/lib/polyphony/core/timer.rb +2 -2
  47. data/lib/polyphony/debugger.rb +3 -3
  48. data/lib/polyphony/extensions/exception.rb +45 -0
  49. data/lib/polyphony/extensions/fiber.rb +87 -11
  50. data/lib/polyphony/extensions/io.rb +2 -2
  51. data/lib/polyphony/extensions/{core.rb → kernel.rb} +0 -73
  52. data/lib/polyphony/extensions/openssl.rb +20 -5
  53. data/lib/polyphony/extensions/process.rb +19 -0
  54. data/lib/polyphony/extensions/socket.rb +20 -9
  55. data/lib/polyphony/extensions/thread.rb +9 -3
  56. data/lib/polyphony/extensions/timeout.rb +10 -0
  57. data/lib/polyphony/extensions.rb +9 -0
  58. data/lib/polyphony/version.rb +1 -1
  59. data/lib/polyphony.rb +2 -4
  60. data/polyphony.gemspec +1 -1
  61. data/test/coverage.rb +2 -2
  62. data/test/test_backend.rb +15 -17
  63. data/test/test_event.rb +1 -1
  64. data/test/test_ext.rb +1 -1
  65. data/test/test_fiber.rb +31 -7
  66. data/test/test_global_api.rb +23 -14
  67. data/test/test_io.rb +5 -5
  68. data/test/test_kernel.rb +2 -2
  69. data/test/test_process_supervision.rb +1 -1
  70. data/test/test_queue.rb +6 -6
  71. data/test/test_signal.rb +20 -1
  72. data/test/test_socket.rb +45 -10
  73. data/test/test_supervise.rb +85 -0
  74. data/test/test_sync.rb +2 -2
  75. data/test/test_thread.rb +22 -2
  76. data/test/test_thread_pool.rb +2 -2
  77. data/test/test_throttler.rb +3 -3
  78. data/test/test_timer.rb +3 -3
  79. data/test/test_trace.rb +1 -1
  80. metadata +19 -9
@@ -65,9 +65,9 @@ class ThreadPoolTest < MiniTest::Test
65
65
  end
66
66
  elapsed = Time.now - t0
67
67
 
68
- assert_in_range 0.0..0.009, elapsed
68
+ assert_in_range 0.0..0.009, elapsed if IS_LINUX
69
69
  assert buffer.size < 2
70
-
70
+
71
71
  sleep 0.15 # allow time for threads to spawn
72
72
  assert_equal @pool.size, threads.uniq.size
73
73
  assert_equal (0..9).to_a, buffer.sort if IS_LINUX
@@ -10,7 +10,7 @@ class ThrottlerTest < MiniTest::Test
10
10
  f = spin { loop { t.process { buffer << 1 } } }
11
11
  sleep 0.2
12
12
  f.stop
13
- assert_in_range 1..4, buffer.size
13
+ assert_in_range 1..4, buffer.size if IS_LINUX
14
14
  ensure
15
15
  t.stop
16
16
  end
@@ -23,7 +23,7 @@ class ThrottlerTest < MiniTest::Test
23
23
  end
24
24
  sleep 0.25
25
25
  f.stop
26
- assert_in_range 2..7, buffer.size
26
+ assert_in_range 4..6, buffer.size if IS_LINUX
27
27
  ensure
28
28
  t.stop
29
29
  end
@@ -34,7 +34,7 @@ class ThrottlerTest < MiniTest::Test
34
34
  f = spin { loop { t.process { buffer << 1 } } }
35
35
  sleep 0.02
36
36
  f.stop
37
- assert_in_range 2..3, buffer.size
37
+ assert_in_range 2..4, buffer.size if IS_LINUX
38
38
  ensure
39
39
  t.stop
40
40
  end
data/test/test_timer.rb CHANGED
@@ -137,11 +137,11 @@ class TimerMiscTest < MiniTest::Test
137
137
  @timer = Polyphony::Timer.new(resolution: 0.001)
138
138
  sleep 0
139
139
  end
140
-
140
+
141
141
  def teardown
142
142
  @timer.stop
143
143
  end
144
-
144
+
145
145
  def test_timer_after
146
146
  buffer = []
147
147
  f = @timer.after(0.01) { buffer << 2 }
@@ -160,6 +160,6 @@ class TimerMiscTest < MiniTest::Test
160
160
  end
161
161
  sleep 0.05
162
162
  f.stop
163
- assert_in_range 3..7, buffer.size
163
+ assert_in_range 3..7, buffer.size if IS_LINUX
164
164
  end
165
165
  end
data/test/test_trace.rb CHANGED
@@ -7,7 +7,7 @@ class TraceTest < MiniTest::Test
7
7
  events = []
8
8
  Thread.backend.trace_proc = proc { |*e| events << e }
9
9
  snooze
10
-
10
+
11
11
  assert_equal [
12
12
  [:fiber_schedule, Fiber.current, nil, false],
13
13
  [:fiber_switchpoint, Fiber.current],
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: polyphony
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.71'
4
+ version: '0.74'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sharon Rosner
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-08-20 00:00:00.000000000 Z
11
+ date: 2022-02-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake-compiler
@@ -136,7 +136,7 @@ dependencies:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
138
  version: 1.1.4
139
- description:
139
+ description:
140
140
  email: sharon@noteflakes.com
141
141
  executables: []
142
142
  extensions:
@@ -144,7 +144,9 @@ extensions:
144
144
  extra_rdoc_files:
145
145
  - README.md
146
146
  files:
147
+ - ".github/FUNDING.yml"
147
148
  - ".github/workflows/test.yml"
149
+ - ".github/workflows/test_io_uring.yml"
148
150
  - ".gitignore"
149
151
  - ".gitmodules"
150
152
  - ".rubocop.yml"
@@ -215,6 +217,9 @@ files:
215
217
  - examples/adapters/sequel_mysql_pool.rb
216
218
  - examples/adapters/sequel_pg.rb
217
219
  - examples/core/await.rb
220
+ - examples/core/calc.rb
221
+ - examples/core/calc_with_restart.rb
222
+ - examples/core/calc_with_supervise.rb
218
223
  - examples/core/channels.rb
219
224
  - examples/core/deferring-an-operation.rb
220
225
  - examples/core/enumerable.rb
@@ -229,6 +234,7 @@ files:
229
234
  - examples/core/queue.rb
230
235
  - examples/core/recurrent-timer.rb
231
236
  - examples/core/resource_delegate.rb
237
+ - examples/core/ring.rb
232
238
  - examples/core/spin.rb
233
239
  - examples/core/spin_error_backtrace.rb
234
240
  - examples/core/supervise-process.rb
@@ -350,6 +356,7 @@ files:
350
356
  - lib/polyphony/adapters/redis.rb
351
357
  - lib/polyphony/adapters/sequel.rb
352
358
  - lib/polyphony/core/channel.rb
359
+ - lib/polyphony/core/debug.rb
353
360
  - lib/polyphony/core/exceptions.rb
354
361
  - lib/polyphony/core/global_api.rb
355
362
  - lib/polyphony/core/resource_pool.rb
@@ -358,13 +365,16 @@ files:
358
365
  - lib/polyphony/core/throttler.rb
359
366
  - lib/polyphony/core/timer.rb
360
367
  - lib/polyphony/debugger.rb
361
- - lib/polyphony/extensions/core.rb
362
- - lib/polyphony/extensions/debug.rb
368
+ - lib/polyphony/extensions.rb
369
+ - lib/polyphony/extensions/exception.rb
363
370
  - lib/polyphony/extensions/fiber.rb
364
371
  - lib/polyphony/extensions/io.rb
372
+ - lib/polyphony/extensions/kernel.rb
365
373
  - lib/polyphony/extensions/openssl.rb
374
+ - lib/polyphony/extensions/process.rb
366
375
  - lib/polyphony/extensions/socket.rb
367
376
  - lib/polyphony/extensions/thread.rb
377
+ - lib/polyphony/extensions/timeout.rb
368
378
  - lib/polyphony/net.rb
369
379
  - lib/polyphony/version.rb
370
380
  - polyphony.gemspec
@@ -402,7 +412,7 @@ metadata:
402
412
  documentation_uri: https://digital-fabric.github.io/polyphony/
403
413
  homepage_uri: https://digital-fabric.github.io/polyphony/
404
414
  changelog_uri: https://github.com/digital-fabric/polyphony/blob/master/CHANGELOG.md
405
- post_install_message:
415
+ post_install_message:
406
416
  rdoc_options:
407
417
  - "--title"
408
418
  - polyphony
@@ -421,8 +431,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
421
431
  - !ruby/object:Gem::Version
422
432
  version: '0'
423
433
  requirements: []
424
- rubygems_version: 3.1.4
425
- signing_key:
434
+ rubygems_version: 3.3.3
435
+ signing_key:
426
436
  specification_version: 4
427
437
  summary: Fine grained concurrency for Ruby
428
438
  test_files: []