Golang适合高并发场景的原因分析

本文分析了Golang为何适合高并发场景,通过360和京东云的消息推送系统实例展示了Golang处理大量并发连接的能力。文章探讨了C10K问题、Coroutine模型和非阻塞/异步IO(callback)。Golang通过轻量级的goroutine和高效的调度,实现了高并发和低资源消耗,对比了与Node.js的性能和代码可读性。
摘要由CSDN通过智能技术生成

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

典型的两个现实案例:

 

我们先看两个用Go做消息推送的案例实际处理能力。

 

360消息推送的数据:

 

16台机器,标配:24个硬件线程,64GB内存   
Linux Kernel 2.6.32 x86_64    
单机80万并发连接,load 0.2~0.4,CPU 总使用率 7%~10%,内存占用20GB (res)    
目前接入的产品约1280万在线用户    
2分钟一次GC,停顿2秒 (1.0.3 的 GC 不给力,直接升级到 tip,再次吃螃蟹)    
15亿个心跳包/天,占大多数。

 

 

 

京东云消息推送系统

 

(团队人数:4)   
单机并发tcp连接数峰值118w    
内存占用23G(Res)    
Load 0.7左右    
心跳包 4k/s    
gc时间2-3.x s

 

C10K问题

 

为什么可以支撑这么高并发的请求呢?我们先从C10K问题说起:2001年左右的时候,有一个叫Dan Kegel的人在网上提出:现在的硬件应该能够让一台机器支持10000个并发的client。然后他讨论了用不同的方式实现大规模并发服务的技术。

 

http://www.kegel.com/c10k.html (英文版)

 

http://www.oschina.net/translate/c10k (中文翻译版)    
http://www.cnblogs.com/fll/archive/2008/05/17/1201540.html

 

当然, 现在C10K 已经不是问题了, 任何一个普通的程序员, 都能利用手边的语言和库, 轻松地写出 C10K 的服务器. 这既得益于软件的进步, 也得益于硬件性能的提高,现在应该扩展讨论的是应该是C10M问题了。

 

参考资料:

 

千万级并发实现的秘密:内核不是解决方案,而是问题所在!   
http://www.csdn.net/article/2013-05-16/2815317-The-Secret-to-10M-Concurrent-Connections

 

Coroutine模型 和 非阻塞/异步IO(callback)

 

不论线程还是进程,都不可能一个连接创建一个,相应的成本太大,多进程和多线程都有资源耗费比较大的问题,所以在高并发量的服务器端使用并不多。解决方案是一个线程或者进程处理多个连接,更具体的现在比较主流的是:Coroutine模型 和 非阻塞/异步IO(callback),在分析这两个之前,我们先看看多进程和多线程的情况。

 

多进程

 

这种模型在linux下面的服务程序广泛采用,比如大名鼎鼎的apache。

 

下图说明了Apache的生命周期(prefork模式)。主进程负责监听和管理连接,而具体的业务处理都会交给子进程来处理。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值