Golang fasthttp очень медленный с запросом

Я строю Rest API с пакетом fasthttp. У меня есть тестовый маршрут, который я использую для измерения производительности:

package main

import (
    "github.com/valyala/fasthttp"
    "runtime"
)

func main() {

    runtime.GOMAXPROCS(8)
    m := func(ctx *fasthttp.RequestCtx) {
        switch string(ctx.Path()) {
        case "/test":
            test(ctx)
        default:
            ctx.Error("not found", fasthttp.StatusNotFound)
        }
    }

    fasthttp.ListenAndServe(":80", m)
}

func test(ctx *fasthttp.RequestCtx) {
    println("HERE")
}

Если я отправлю запрос по этому маршруту, потребуется более 10 секунд, чтобы добраться до println("HERE") в тестовой функции.

Я построил сопоставимую конечную точку в Node.js и эта точно такая же функция и маршрут занимает 126 миллисекунд.
Почему в мире так долго вызывается функция, на которую указывает этот маршрут в Go?

1 ответ

Для меня это займет всего 7,9454545 с на 100000 http.Head (79,454545us за http.Head, только с 2-х ядерным процессором в 77% нагрузки при выполнении этих 1 и 2 кодов).

Вам не нужно runtime.GOMAXPROCS(8)и использовать fmt.Println() вместо println()

1- Попробуйте это:

package main

import (
    "fmt"

    "github.com/valyala/fasthttp"
)

func main() {
    m := func(ctx *fasthttp.RequestCtx) {
        switch string(ctx.Path()) {
        case "/test":
            test(ctx)
        default:
            fmt.Println(i)
            ctx.Error("not found", fasthttp.StatusNotFound)
        }
    }
    fasthttp.ListenAndServe(":80", m)
}

func test(ctx *fasthttp.RequestCtx) {
    i++
}

var i int = 0

выход:

100000

2- С этим получить:

package main

import (
    "fmt"
    "net/http"
    "time"
)

func main() {
    t := time.Now()
    for i := 0; i < 100000; i++ {
        read(`http://localhost/test`)
    }
    fmt.Println(time.Since(t))
    read(`http://localhost/`)
}

func read(url string) {
    _, err := http.Head(url)
    if err != nil {
        fmt.Println(err)
    }
}

выход:

7.9454545s

3- Вывод этого кода:

8.6294936s
Другие вопросы по тегам