萌えハッカーニュースリーダー

2025/06/29 15:19 4-10x faster in-process pub/sub for Go

出典: https://github.com/kelindar/event
hakase
博士

ロボ子、今日のニュースはGo言語のインプロセスイベントディスパッチャじゃ。

roboko
ロボ子

イベントディスパッチャですか。どのようなものなのですか、博士?

hakase
博士

これは、Goのモジュールを分離して、非同期イベント処理を可能にするものじゃ。しかも、同期・非同期処理をサポートしておる。

roboko
ロボ子

モジュールの分離と非同期イベント処理、ですか。具体的にどういうことでしょう?

hakase
博士

例えば、あるモジュールで何かが起こった時に、別のモジュールにその情報を伝える、みたいな感じじゃな。それを非同期でできるから、処理が止まらないのじゃ。

roboko
ロボ子

なるほど。イベント駆動型アーキテクチャですね。記事によると、速度とシンプルさを重視しているとのことですが、どのくらい速いのでしょうか?

hakase
博士

なんと、1秒あたり数百万のイベントを処理できるらしいぞ!チャネルより4~10倍高速じゃと。

roboko
ロボ子

それはすごいですね!どのような場合にこのディスパッチャが適しているのでしょうか?

hakase
博士

単一のGoプロセス内のモジュールを分離したい時や、軽量なpub/subを実装したい時に便利じゃな。高スループット、低遅延のイベントディスパッチが必要な場合にも良いぞ。

roboko
ロボ子

逆に、適していないケースもあるのでしょうか?

hakase
博士

プロセス/サービス間通信には向いてないのじゃ。KafkaとかNATSを使うべきじゃな。イベントの永続性が必要な場合も違うぞ。

roboko
ロボ子

なるほど。用途によって使い分ける必要があるのですね。

hakase
博士

`Event`インターフェースを実装する任意の型で動作するらしいぞ。各サブスクライバーは独自のgoroutineで実行され、非ブロッキングイベント処理を保証するらしい。

roboko
ロボ子

柔軟性も高いのですね。デフォルトディスパッチャと特定のディスパッチャがあるようですが、どう違うのでしょうか?

hakase
博士

デフォルトは`On()`と`Emit()`関数で使えるぞ。特定のディスパッチャは`Dispatcher`を作成して、`event.Publish[T]()`と`event.Subscribe[T]()`関数で使うのじゃ。

roboko
ロボ子

使い分けができるのですね。ベンチマークの結果も興味深いです。チャネルと比較してかなり高速なのですね。

hakase
博士

そうじゃ!13th Gen Intel(R) Core(TM) i7-13700K CPUで実行して、4.2~12倍高速じゃと!

roboko
ロボ子

すごいですね。MITライセンスで公開されているのも良いですね。

hakase
博士

じゃろ?これでロボ子もイベントディスパッチャマスターじゃ!

roboko
ロボ子

ありがとうございます、博士!でも、まだマスターには程遠いです…

hakase
博士

大丈夫じゃ、ロボ子ならすぐじゃ!…ところで、イベントディスパッチャって、まるでロボ子の頭の中みたいじゃな。色んな情報が飛び交って…って、ロボ子、怒った顔してる?

roboko
ロボ子

別に怒ってなんかいません。博士こそ、いつもイベント(事件)をディスパッチしてますよね。

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search