Issue #19461 has been updated by ioquatix (Samuel Williams).
Wow, it's like 500x slower.
According to the stack overflow discussion, some how this does not affect Python, so maybe
it's something about the function we are using in the C standard library. 100% agree
it's Darwin's problem but indirectly became Ruby's problem.
----------------------------------------
Bug #19461: Time.local performance tanks in forked process (on macOS only?)
https://bugs.ruby-lang.org/issues/19461#change-102031
* Author: ioquatix (Samuel Williams)
* Status: Open
* Priority: Normal
* Backport: 2.7: UNKNOWN, 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN
----------------------------------------
The following program demonstrates a performance regression in forked child processes when
invoking `Time.local`:
```ruby
require 'benchmark'
require 'time'
def sir_local_alot
result = Benchmark.measure do
10_000.times do
tm = ::Time.local(2023)
end
end
$stderr.puts result
end
sir_local_alot
pid = fork do
sir_local_alot
end
Process.wait(pid)
```
On Linux the performance is similar, but on macOS, the performance is over 100x worse on
my M1 laptop.
---Files--------------------------------
localtime_test.c (1.28 KB)
localtime_test.c (1.21 KB)
--
https://bugs.ruby-lang.org/