Почему fastthttp быстрее, чем net/http?
fasthttp
на основе сервера до 10 раз быстрее, чем net/http
,
Какие детали реализации делают fasthttp
намного быстрее? Кроме того, как он управляет входящими запросами лучше, чем net/http
?
1 ответ
Решение
В статье " http реализация fasthttp на Голанге" от husobee упоминается:
Ну, это намного лучшая реализация по нескольким причинам:
- Модель рабочего пула - это модель с нулевым распределением, так как рабочие уже инициализированы и готовы к работе, тогда как в реализации stdlib
go c.serve()
должен выделить память для рутины.- Модель рабочего пула легче настроить, так как вы можете увеличить / уменьшить размер буфера числа рабочих единиц, которые вы можете принять, по сравнению с пожарной и забыть модель в stdlib
- Модель рабочего пула позволяет обработчикам быть более связанными с сервером через канал связи, например, если серверу необходимо отключиться, ему будет легче общаться с работниками, чем в реализации stdlib.
- Подпись определения функции обработчика лучше, так как она принимает только контекст, который включает и запрос, и обработчик, необходимые обработчику. это УГРОМНО лучше, чем стандартная библиотека, так как все, что вы получаете от stdlib, это средство для написания запросов и ответов... Работа в go1.7 по включению контекста в запрос - это в значительной степени хак, чтобы дать людям то, что они действительно хотят (контекст) не ломая никого.
В целом, просто лучше написать сервер с моделью рабочего пула для обслуживания запросов, а не просто создавать "поток" для каждого запроса, без каких-либо ограничений.