kubo39's blog

ただの雑記です。

CrystalとネットワークI/Oとウェブスタックのはなし

某所での議論を見て。

RubyだとUnicronだとかPumaだとかThinだとかウェブサーバ実装たくさんあるけど、Crystalでウェブサーバ実装が乱立するような可能性ってそんなにないんじゃないかなあ、というのが自分の意見です。

CrystalのI/Oの仕組みはネットワークI/Oが非同期、ファイルI/Oが同期的な仕組みになっていて、ネットワークI/Oのほうはランタイムスケジューラにべったりな実装になっている。(Errno::EAGAINが出たらスケジューラに登録されたタスクを切り替える、みたいな処理が入ってる)

Unicornみたいなprefork+同期I/Oなウェブサーバ実装を作るにはSocketクラスをモンキーパッチするところから必要になる。

前のエントリでの話のとおり、Crystalの方向性としてランタイムスケジューラのマルチスレッドを計画してるということもあるし、preforkな鯖書くのと相性が悪くなっていくので、とりあえず標準のHTTPサーバあるの前提でウェブスタック組んじゃっていいんじゃないですかね。