前言

之前一直对Golang如何处理高并发http请求的一头雾水,这几天也查了很多相关博客,似懂非懂,不知道具体代码怎么写
下午偶然在开发者头条APP上看到一篇国外技术人员的一篇文章用Golang处理每分钟百万级请求,看完文章中的代码,自己写了一遍代码,下面自己写下自己的体会
核心要点
将请求放入队列,通过一定数量(例如CPU核心数)goroutine组成一个worker池(pool),workder池中的worker读取队列执行任务
实例代码
以下代码笔者根据自己的理解进行了简化,主要是表达出个人的思路,实际后端开发中,根据实际场景修改
func doTask() {
//耗时炒作(模拟)
time.Sleep(200 * time.Millisecond)
wg.Done()
}
//这里模拟的http接口,每次请求抽象为一个job
func handle() {
//wg.Add(1)
job := Job{}
JobQueue <- job
}
var (
MaxWorker = 1000
MaxQueue = 200000
wg sync.WaitGroup
)
type Worker struct {
quit chan bool
}
func NewWorker() Worker {
return Worker{
quit: make(chan bool)}
}
// Start method starts the run loop for the worker, listening for a quit channel in
// case we need to stop it
func (w Worker) Start() {
go func() {
for {
select {
case <-JobQueue:
// we have received a work request.
doTask()
case <-w.quit:
// we have received a signal to stop
return
}
}
}()
}
// Stop signals the worker to stop listening for work requests.
func (w Worker) Stop() {
go func() {
w.quit <- true
}()
}
type Job struct {
}
var JobQueue chan Job = make(chan Job, MaxQueue)
type Dispatcher struct {
}
func NewDispatcher() *Dispatcher {
return &Dispatcher{}
}
func (d *Dispatcher) Run() {
// starting n number of workers
for i := 0; i < MaxWorker; i++ {
worker := NewWorker()
worker.Start()
}
}
测试
func Benchmark_handle(b *testing.B) {
runtime.GOMAXPROCS(runtime.NumCPU())
d := NewDispatcher()
d.Run()
for i:=0;i<10000;i++ {
wg.Add(1)
handle()
}
wg.Wait()
}
测试结果
pkg: golang-study-demo/goroutine 1 2029931652 ns/op PASS
1w个任务放到队列中,1000个worker去执行任务,每个任务的耗时200ms,任务执行完需要2s多
以上只是笔者的个人看法,不知道对Golang并发编程的理解是否正确,有错误的地方,希望高手指点一二,在此谢过
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
# golang
# 高并发
# 高并发架构
# 高并发实例
# golang高并发之本地缓存详解
# Golang使用Channel组建高并发HTTP服务器
# golang使用map支持高并发的方法(1000万次操作14ms)
# golang高并发系统限流策略漏桶和令牌桶算法源码剖析
# 关于golang高并发的实现与注意事项说明
# 基于Golang 高并发问题的解决方案
# golang高并发限流操作 ping / telnet
# golang-gin-mgo高并发服务器搭建教程
# golang高并发的深入理解
# 浅谈Go语言高并发处理思路
# 自己的
# 在此
# 似懂非懂
# 一遍
# 看完
# 技术人员
# 写了
# 这几天
# 这篇文章
# 谢谢大家
# 每分钟
# 如何处理
# 头条
# 一篇文章
# 进行了
# 有错误
# 是否正确
# 池中
# 主要是
# 后端
相关文章:
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
简单实现Android文件上传
制作农业网站的软件,比较好的农业网站推荐一下?
微信推文制作网站有哪些,怎么做微信推文,急?
网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?
魔方云NAT建站如何实现端口转发?
如何在万网开始建站?分步指南解析
c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】
建站之星备案是否影响网站上线时间?
建站之星后台密码如何安全设置与找回?
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
宝华建站服务条款解析:五站合一功能与SEO优化设置指南
整蛊网站制作软件,手机不停的收到各种网站的验证码短信,是手机病毒还是人为恶搞?有这种手机病毒吗?
已有域名如何免费搭建网站?
如何挑选高效建站主机与优质域名?
公司网站的制作公司,企业网站制作基本流程有哪些?
深圳企业网站制作设计,在深圳如何网上全流程注册公司?
营销式网站制作方案,销售哪个网站招聘效果最好?
如何正确选择百度移动适配建站域名?
建站之星导航菜单设置与功能模块配置全攻略
建站之星体验版:智能建站系统+响应式设计,多端适配快速建站
网站制作软件有哪些,制图软件有哪些?
如何注册花生壳免费域名并搭建个人网站?
建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南
义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?
高端建站三要素:定制模板、企业官网与响应式设计优化
网站制作难吗安全吗,做一个网站需要多久时间?
建站之星如何助力网站排名飙升?揭秘高效技巧
上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?
我的世界制作壁纸网站下载,手机怎么换我的世界壁纸?
浅析上传头像示例及其注意事项
如何在阿里云高效完成企业建站全流程?
太原网站制作公司有哪些,网约车营运证查询官网?
阿里云网站制作公司,阿里云快速搭建网站好用吗?
如何在阿里云虚拟服务器快速搭建网站?
建站主机选购指南:核心配置优化与品牌推荐方案
建站之星×万网:智能建站系统+自助建站平台一键生成
ui设计制作网站有哪些,手机UI设计网址吗?
宁波免费建站如何选择可靠模板与平台?
北京的网站制作公司有哪些,哪个视频网站最好?
如何在香港服务器上快速搭建免备案网站?
威客平台建站流程解析:高效搭建教程与设计优化方案
如何在建站主机中优化服务器配置?
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
专业网站制作服务公司,有哪些网站可以免费发布招聘信息?
微信h5制作网站有哪些,免费微信H5页面制作工具?
小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建
宝盒自助建站智能生成技巧:SEO优化与关键词设置指南
哈尔滨网站建设策划,哈尔滨电工证查询网站?
如何选择高效响应式自助建站源码系统?
*请认真填写需求信息,我们会在24小时内与您取得联系。