2017-01-13 15 views
5

fasthttpサーバーは、net/httpよりも最大10倍高速です。golangパッケージでは、fasthttpがnet/httpよりも高速なのはなぜですか?

これは、実装レベル(コーディングレベル)の点ではるかに速いのですか?
受信リクエストは他のリクエストとどのように異なるのですか?

+4

主な理由:fasthttpは** HTTPの完全実装ではありません。 fasthttpはほとんどのHTTP用には十分かもしれませんが、すべてではありません。 – Volker

+0

@Volker ... fasthttpに残っているものは何ですか? –

+1

http // 2のサポートなしhttps://github.com/valyala/fasthttp/issues/144 – nishanths

答えて

9

husobeeから記事「http implementation fasthttp in golangは」言及:

まあ、これはいくつかの理由のためにはるかに優れた実装です:

  1. ワーカープールモデルは、労働者として、ゼロ配分モデルであり、 stdlibの実装では、go c.serve()はゴルーチンのためにメモリを割り当てる必要があります。
  2. 受理可能な作業ユニットの数のバッファサイズをstdlibと比較して増減できるので、ワーカープールモデルのチューニングが容易になります
  3. ワーカープールモデルハンドラがチャネル通信を介してサーバに接続することを可能にします。例えば、サーバがシャットダウンする必要がある場合、stdlib実装よりも簡単にワーカーと通信できます
  4. ハンドラ関数定義シグネチャは、それはハンドラが必要とする要求とライタの両方を含むコンテキストだけを取り込むからです。 stdlibから得られるのはリクエストと応答のライターなので、これは標準ライブラリよりもはるかに優れています...要求内のコンテキストを含めるgo1.7の作業は、実際に必要なもの(コンテキスト)を人々に与えるためのハックです。誰も壊すことなくそれだけで、箱から出して絞るのない方法で、リクエストごとに「スレッド」を産卵するとは対照的に、要求を処理するためのワーカープールモデルを使用してサーバーを書くことだけで良いです全体的に

+1

@ amit-verma、それでも、このパッケージの方が速い理由の1つは、["標準は作者の姿勢です"(https://groups.google.com/d/msg/golang-nuts/OaQu4QezAr0/)ですAtrwY00LBgAJ)。 CS/IT *に参加している人は、私たちのシステムが気に入っているような気持ちを過度に最適化する自然な傾向があります。 "最高の"。残念なことに、現実の世界*保守性*では、ほとんどの場合、生のスピードが優先されます。 – kostix

+1

@ amit-verma、あなたがFacebookでなくても、たとえば、youserlfに、PHPを実際に自分のワークロードで動作させるような、狂った保守性の努力でプロジェクトに公開することができます;-)つまり、 'net/http'は戦闘テスト済みで標準に準拠しており、チームの中核となるGoチームを持っています。だからあなたは本当にあなたのプロジェクトのための 'fasthttp'の生のスピードを必要としますか?*あなたはボトルネックを持っていますか?あなたはそれをプロファイリングして、通常の犯人(ポインタのポインタへのポインタの無駄な割り振り/たくさんのようなもの)を排除しましたか? – kostix

+0

@AmitVerma、私の前のコメントの最後のビットに答えてください:«あなたは本当にあなたのプロジェクトのためにfasthttpの生のスピードを本当に必要としますか?ボトルネックがありますか?あなたはそれをプロファイリングして、通常の犯人(無効な割り当て/ポインタへのポインタへのポインタなど)を除外しましたか?»私は、初心者のプログラマーが陥る共通の罠に陥っているようです。それは、「私が知っている*私のプログラム*は、ここでは正確には遅くなければならない*知っている*」というマントラです。それは明白な不機嫌なことであり、有料制作作業を行う前に、この習慣を知らない方がよいでしょう。 – kostix

関連する問題