ちなみに

火曜日の空は僕を押しつぶした。

Thread.newとThread.startの違い

基本的に Thread.new と同じですが、 new メソッドと違い initialize メソッドを呼びません。

502 Bad Gateway

の意味が分からなくて、initializeを呼んでいる分newの方がオーバーヘッドがでかいんじゃないかと思って、ベンチマークとってみたけど、ほとんど差がなくて、うーんってなっていたので、ここぞとばかりにZnZさんに教えていただきました。

結局何が違うかというか、Threadを継承したクラスを使うときに、newメソッドだとそのサブクラスのinitializeが呼ばれて、sratr(fork)メソッドだと呼ばれないという点です。

以下の検証コードで試してみました。

class MyThread < Thread
  def initialize
    super
    puts 'MyThread was created'
  end
end

MyThread.new { p:new }.join
p:===
MyThread.start { p:start }.join

結果は、

:new
MyThread was created
:===
:start

なるほど、なるほど。