2016-06-22 5 views
0

ゴールールーチンのオーバーヘッドは低いと理解していますが、どれくらい良いのか不思議です。受信メッセージを処理するサーバーがある場合、各受信メッセージを処理するための新しいgoルーチンを作成すると、標準のプロデューサ/コンシューマモデルとチャネルを比較するとどうなりますか?ゴランのゴールールのオーバーヘッド

これは、高性能のgoサーバを持つことが妥当かどうかは、着信要求に対して新しいgoルーチンを生成することです。

答えて

2

組み込みのhttpパッケージには、接続ごとにゴルーチンが使用されており、数千人の同時ユーザーを処理できることを示す多数のベンチマークがあります。だから、あなたがたくさんのメッセージをたくさん持っているのでなければ、メッセージごとに新しいゴルーチンを作るのは妥当なことだと思います。そして、どんな場合でも、あなたの前提を確認するために良いbenchmarking featureがあります。

https://golang.org/src/net/http/server.go#L2137

2

私たちは、実際に同様のアプローチでストレステストをしていました。すべてのhttp要求に対して新しいスレッドを生成しました。同時実行性は10秒以内に非常に良好で、10万回のリクエストに達しました。あなたが直面する唯一のボトルネックは、すべての処理が十分速くなければ、そのプロセスのためにメモリが足りなくなる可能性があるためです。

私は確かにそれのための回避策がありますが、それはあなたが無制限の行くルーチンを調整したり産んだりしたくない理由の1つです。私たちが直面した問題は、このレベルの並行性に追いつくことができなかった別のAPIからデータを取得しようとしていたことです。それゆえ、以前の調整の提案。

+0

なぜdownvoteですか? – Joppe