Fasthttp源码分析之http server源码分析

fasthttp性能优化点 1.response buffering 这个是优化对于http 1.1 的pipeline,会有多个request和response的请求。如下图 原始go http server的处理伪代码如下 工作模式很简单,这个链接有读事件,就读取请求,然后处理请求,然后响应给客户端,可以看到如果是pipeline方式的话,会多次调用read 和 write系统调用。 所以fasthttp用了个buffer,缓冲response数据,等到请求数据没了的话,再一起发送给客户端,代码如下 优... 阅读详情

本文公众号文章链接:https://mp.weixin.qq.com/s/YZnWpWIRm1d0D_qOeLbqeQ

本文csdn博客链接:https://blog.youkuaiyun.com/screscent/article/details/79697992


Fasthttp源码分析之http server源码分析

Fasthttp是比标准库net/http还要快的http库。今天研究了下它http server的源码。

 

源码路径为:github.com/valyala/fasthttp

源码目录见文章最后。(因为目录太长,故放最后)

 

 

一、Server

先看下常规的实例用法。以下是README.md中的代码


 

那么就根据入口,进行源码跟踪。

github.com/valyala/fasthttp/server.go

 

 

继续跟踪Server结构体

 

上面看到了入口的Handler的定义

 

从Server最后的成员来看,用了很多的资源池,这是其性能高的重要原因之一。

 

我们继续跟踪,Server函数

 

里面有两个很重要的地方。第一个红框中,有一个workerpool,这个就是其于总不同的地方。

其中有一个最重要的东西,就是s.serverConn。因为workerpool最后进入工作的函数就是它。

 

构建好workerpool之后,就启动了accept,并将其放入workerpool中进行工作。


在这里我们先直接进入到s.serverConn


 

关键代码如图中。在函数中,准备好了ctx之后,最终调用的是Handler。这个就是用户设置的Handler。

到此逻辑已经终结了。

 

二、workerpool

分析完逻辑过程后,我们重点看看workerpool

github.com/valyala/fasthttp/workerpool.go

 

其中最重要的是WorkerFunc。这个是传入进行的任务。

还有一个最重要的是ready,它的类型为workerChan

 

workerChan里面保存了最后使用时间和传参用的net.Conn

 

根据流程逻辑,看看Start函数

 

这个函数,其实很简单,定时调用了clean,清理过期空闲的worker

 

clean代码就不过多解释了。

 

继续跟踪流程逻辑

 

从Server函数,可以看到,获取workerChan,并将连接发送到chan中

 

上面的代码中分为了两个部分,一个为从现有的worker重寻找空闲的进行发送c。

如果没找到,则要看是否达到了上限有个标志位createWorker。如果没有达到上限,

则从workerChanPool中Get新的,

并开启了协程,执行wp.workerFunc。

 

最后我们看看workerFunc函数,其实就是调用了wp.WorkerFunc。这个就是之前提到的工作任务。

 

 

 

龚浩华

月牙寂道长

QQ 29185807

2018年03月26日

 第一时间获取文章,可以关注本人公众号:月牙寂道长,也可以扫码关注


 

 

 

源码目录:

 

 


 

 



jdk下httpserver源码解析   在写这篇博客之前我查了很久发现全网都没有一篇写httpserver源码解析的      所以今天就由我来为大家解析一下httpserver的源码。(这里我会去掉其中的https部分的源码,只讲http部分,对httpserver中https的实现感兴趣的读者可以尝试自己去阅读,这部分并不复杂)      第一次在没有参考资料的情况下写这么长一篇源码解析,可能会有很多错误和讲不清楚的地方,希望大... 阅读详情

相关推荐

fasthttp:Go的快速HTTP包。 为高性能而调优。 热路径中的零内存分配。 比nethttp快10倍

快速http Go的快速HTTP实现。 目前fasthttp成功使用在生产,从每个物理服务器上超过150万的并发保持连接服务多达200K的RP。 与HTTP服务器性能比较 简而言之,fasthttp服务器的速度比net / http快10倍。 以下是基准测试结果。 GOMAXPROCS = 1 net / http服务器: $ GOMAXPROCS=1 go test -bench=NetHTTPServerGet -benchmem -benchtime=10s BenchmarkNetHTTPServerGet1ReqPerConn 1000000 12052 ns/op 2297 B/op 29 allocs/op BenchmarkNetHTTPServerGet2ReqPerConn

[golang]fasthttp源码

一.核心逻辑 func (s *Server) ListenAndServe(addr string) error { //1.监听端口 ln, err := net.Listen("tcp4", addr) if tcpln, ok := ln.(*net.TCPListener); ok { return s.Serve(tcpKeepaliveListener{ TCPListener: tcpln, keepalive: s.TCPKeepa.

小小李的博客 625

链家二手房信息爬取(内附完整代码)

链家二手房信息爬取1.简介2. 爬虫思路2.1 网页分析2.2 详情页分析2.3 不同页码的爬取2.4 解决链家只显示100页数据2.5 简单的反爬与进度条显示3. 总结 1.简介   最近帮同学爬取了链家在售二手房的信息,这是本人学习爬虫以来爬取数据最多的一次,就想着写个博客记录一下。   本次爬虫是利用python+jupyter notebook实现的,用到的第三方库如下: import pandas as pd # 数据存储 import requests # 网页内容获取 import re #

qq_46256922的博客 3万+

fasthttp 协程池实现分析

fasthttp workerpool 源码: https://github.com/valyala/fasthttp/blob/master/workerpool.go 特点: workerchan 后进先出 定时清除workerChan 源码简单分析 workerpool struct 定义: type workerPool struct { WorkerFunc ServeHandle...

wwhhff11 932

Agent本地部署教程详细步骤

在开始之前,你需要明确你要部署的Agent是什么。如果你需要部署其他Agent,请参考其官方文档调整步骤。

weixin_39673931的博客 2502

别再只看pLDDT了!AlphaFold预测结果解读保姆级指南:pLDDT、PAE、pTM、ipTM到底怎么看?

本文详细解析了AlphaFold预测结果中的关键指标pLDDT、PAE、pTM和ipTM,帮助用户从单一依赖pLDDT进阶到全面理解蛋白质结构预测。通过实际案例和技巧,指导如何正确解读这些指标,避免常见错误,并提供了从预测到发表的实用建议。

weixin_29100399的博客 355

go-fasthttp源码分析

为什么80%的码农都做不了架构师?>>> ...

weixin_34101229的博客 401

【阿里云大模型高级工程师ACP习题集】2.1 用大模型构建新人答疑机器人

【摘要】这是我精心整理出对应的习题集,里面足足有 30 道题目,从基础概念到深度拓展,全方位覆盖章节重点、难点。不管你是想检验自己的学习成果,还是想针对薄弱环节进行强化训练,它都能完美适配!

davidkorhenn的博客 2609

fasthttp 线程池

文章目录1. fasthttp携程池关键结构体1. fasthttp 协程池背景2. fasthttp socket侦听逻辑3. fasthttp 1. fasthttp携程池关键结构体 去掉了部分不重要成员; type workerPool struct { // Function for serving server connections. // It must leave ...

andylau00j的专栏 1044

华为昇腾 Atlas 200I DK A2 开发板编程接口学习入门:系统安装和开发步骤、注意事项与典型案例实战

华为昇腾开发板编程接口指南:从入门到进阶 本文系统介绍了华为昇腾开发板的编程接口体系,涵盖MindXSDK和AscendCL两大核心框架。MindXSDK提供高层封装接口,适合快速搭建视觉应用;AscendCL则是底层接口,需手动管理设备内存。文章详细讲解了: 开发环境搭建步骤,包括系统配置、依赖安装 MindXSDK组件化编程流程(图像分类实例) AscendCL底层开发方法(内存管理、模型推理) 常见问题解决方案和调试技巧 两个典型应用实例(摄像头目标检测和图像分类) 针对小白开发者,推荐从MindXS

bother3000的博客 2425

IoU的进化之路——IoU、GIoU、DIoU、CIoU四种损失函数总结

IoU、GIoU、DIoU、CIoU四种损失函数总结

chase 8130

fasthttp 的 server.Shutdown() 究竟能不能实现 graceful shutdown

(s.CloseOnShutdown && atomic.LoadInt32(&s.stop) == 1) // 服务处于关停状态,且配置了 `一旦进入关停就不要再处理新连接了` 的标志。case <-ctx.Done(): // 外部是否触发了信号,导致 context 变成 done (通常都是 context.Background(),不会触发这个分支)// stop 标志主要影响 tcp 长连接中,是否在一个连接上处理多次请求和响应后 —— 如果遇到服务关停的消息,如何决定长连接上的后续行为。

2501_94593780的博客 817

学Simulink--基础微电网场景实例:基于Simulink的微电网并网/孤岛无缝切换控制仿真

本文完成了基于 Simulink 的微电网并网/孤岛无缝切换控制仿真,实现了:✅ 构建含双模式逆变器的微电网模型✅ 实现预同步 + Stateflow 逻辑的智能切换✅ 验证计划与非计划切换的性能边界✅ 证明“无缝”在工程上是可实现的。

amy_mhd的博客 102

中文文化符号结构化分析:从“观虎悟道·正印护体”看规则、词典与标签体系

中文文本处理中,短短语与四字词的结构化分析一直是工程落地的难点。与普通分词不同,文化符号型短语依赖领域词典、语义映射与规则引擎协同处理。本文基于规则与词典的轻量方案,演示如何将“观虎悟道·正印护体”这类短语拆解为结构标签、语义标签与场景标签,输出可复用的结构化结果。从词典构建到语义映射再到规则解析,完整覆盖短文本分析的通用流程。该思路可广泛用于内容标签体系建设、文化IP命名分析、意图识别前的预处理与文本特征抽取等工程实践场景,为中文短文本结构化提供一套可控、可解释、易扩展的参考路径。

weixin_34221276的博客 360

用 SAP ABAP ALV 重塑 SM30:可扩展的自定义表维护视图与自动传输实践

文章摘要: 本文提出了一种基于ALV Grid的动态表维护框架,用于替代传统SM30维护视图。该方案通过输入表名自动生成维护界面,支持动态筛选、批量操作和自动传输管理。核心设计包括:利用BAdI实现扩展点、通过行状态字段简化数据变更跟踪、使用Style Table控制单元格编辑权限、集成CTS实现自动传输。相比SM30标准维护,该框架显著提升了交互体验(支持ALV排序/过滤/汇总)和业务扩展性(统一校验与权限控制),同时解决了"维护+传输"流程割裂的问题。文中详细阐述了技术实现方案,并提

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 318

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Linux:http服务(Apache 2.4.57)源码编译——配置网站 || 入门到入土

我的服务器为centos7系统。

鲍海超 5479

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

简单实现 http Server (版本1、2)

三个工作日收到了offer,头条面试体验还是很棒的,这次的头条面试好像每面技术都问了我算法,然后就是中间件、MySQL、Redis、Kafka、网络等等。第一个是算法关于算法,我觉得最好的是刷题,作死的刷的,多做多练习,加上自己的理解,还是比较容易拿下的。而且,我貌似是将《算法刷题LeetCode中文版》、《算法的乐趣》大概都过了一遍,尤其是这本。

2401_84049040的博客 591

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Fasthttp 项目教程

Fasthttp 项目教程 【免费下载链接】fasthttp Fast HTTP package for Go. Tuned for high performance. Zero memory allocations in hot paths. Up to 10x faster than net/http ...

gitblog_00786的博客 785

Sun HttpServer

[code="java"] /** Provides a simple high-level Http server API, which can be used to build embedded HTTP servers. Both "http" and "https" are supported. The API provides a partial implementation...

louisling 334

Golang http之server源码详解

转自仅做个人备份我们先看一个简单的httpserver例子当服务器启动后,浏览器访问http8086/hello网页上会显示以上就是http服务的一个简单demo,下面我们主要从源码来分析httpserver。

仅做个人笔记 1587

fasthttp 为什么比标准库快 10 倍 ?

概述fasthttp是一个使用 Go 语言开发的 HTTP 包,主打高性能,针对 HTTP 请求响应流程中的hot path代码进行了优化,达到零内存分配,性能比标准库的net/http快 10 倍。上面是来自官方Github主页的项目介绍,抛开其介绍内容不谈,光从名字本身来看,作者对项目代码的自信程度可见一斑。本文不会讲解fasthttp的应用方法,而是会重点分析fastht...

Go中国 1129

百行代码编写httpserver及基本函数介绍

本文介绍一个最简单的Linux下服务器项目及程序编写,整个工程仅一百余行代码,非常适合想从事Linux及后台开发相关工作的新手入门(文末附源码)。 一、结果展示 Linux环境下打开终端并进入工程所在文件夹,先编译工程再运行程序: 其中8888为4位端口号。执行程序后打开Linux环境自带的火狐浏览器(FireFox),输入 http://localhost:8888/index.html 并回车,之后浏览器就会显示出工程文件夹内HTML文件中的内容。 二、项目简介 网络编程,或者..

qq_44272681的博客 516

简单http学习:4 server_file 函数

void serve_file(int client, const char *filename) { FILE *resource = NULL; int numchars = 1; char buf[1024]; buf[0] = ‘A’; buf[1] = ‘\0’; //这里设置的意义是什么,保证进入循环 while ((numchars > 0) && strcmp("\n", buf)) /* read & discard headers */ numchars =

梅杏柿的博客 464

fasthttp mysql_fasthttp原理简析

fasthttp是golang下的一个http框架,顾名思义,与原生的http实现相比,它的特点在于快,按照官网的说法,它的客户端和服务端性能比原生有了十倍的提升。它的高性能主要源自于“复用”,通过服务协程和内存变量的复用,节省了大量资源分配的成本。工作协程的复用协程的复用可以参见​workerpool.go​每个工作协程代码如下worker协程和连接协程之间通过channel通信,内部维护了一个...

weixin_34532234的博客 439

【特征匹配】Fast原理及源码解析

在实时的视频流处理中,需要对每一帧特征提取,对算法处理速度上有很高的要求,传统的SIFT,Harris等特征点提取很难满足。由此提出Fast(Features from Accelerated Segment Test),由于不涉及尺度,梯度,等复杂运算,Fast检测器速度非常快。它使用一定邻域内像元的灰度值与中心点比较大小去判断是否为一个角点。但它的缺点是不具有方向性,尺度不变性。 转载请

勿在浮砂筑高台 1万+

Github每日精选(第15期):Go 的快速 HTTP 包 fasthttp

fasthttp是为一些高性能边缘案例设计的。比net/http快10倍,除非您的服务器/客户端需要每秒处理数千个中小型请求并且需要一致的低毫秒响应时间,否则fasthttp可能不适合您。对于大多数情况net/http来说要好得多,因为它更易于使用并且可以处理更多情况。在大多数情况下,您甚至不会注意到性能差异。简而言之,fasthttp服务器比net/http快10倍。以下是基准测试结果。简而言之,fasthttp客户端比net/http快10倍。以下是基准测试结果。......

haleycat的博客 628
上一篇: 第一时间获取文章,可以关注本人公众号:月牙寂道长
下一篇: groupcache源码分析
月牙寂
博客等级 码龄18年 171粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值