天枫庄资源网 Design By www.wosibo.com
前言
之前一直对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并发编程的理解是否正确,有错误的地方,希望高手指点一二,在此谢过
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
天枫庄资源网 Design By www.wosibo.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
天枫庄资源网 Design By www.wosibo.com
暂无如何利用Golang写出高并发代码详解的评论...
更新日志
2024年05月17日
2024年05月17日
- 白玛多吉《梦》限量1:1母盘直刻[低速原抓WAV+CUE][508M]
- 魏金栋-金歌新曲-梦里全是桂花香2CD[天凡之音][WAV+CUE]
- 鲛岛有美子-樱花赋HQCD[天龙][WAV+CUE]
- [In-Akustik7506]ReferenceSoundEdition-GreatWomenOfSong(2014)HQCD[WAV+CUE]
- 日本EMI超级名盘TOGE-11035-36BeethovenFidelio-Furtwngler
- 宝丽金50周年2010《古典篇》3CD限定盘[低速原抓WAV+CUE]
- 华纳群星.1992-永远新一天华纳15周年金钻群星演唱会2CD【华纳】【WAV+CUE】
- 原声《功夫熊猫4 OST》[FLAC][545M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- Taylor Swift《THE TORTURED POETS DEPARTMENT- THE ANTHOLOGY》[320K/MP3][279.09MB]
- 崔健《85回顾+梦中的倾诉》2CD [WAV+CUE][771M]
- 群星《安桥试音碟》3CD[FLAC][1.1G]
- Taylor Swift《THE TORTURED POETS DEPARTMENT- THE ANTHOLOGY》][24bit 48kH][FLAC/分轨]
- 群星1995-阿诗玛·中国歌剧金曲[中唱][WAV+CUE]
- [JVC]吴文光-中国古琴:流水[FLAC分轨]