polyphony 0.71 → 0.74

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.
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: []