说到底, 这个是因为对泛型支持的不完备导致的.
Go语言是没啥NB的特性, 但是Go的特性和工具组合在一起就是好用.
这就是Go语言NB的地方.
1.11 没有泛型支持,常见数据类型接口丑陋
没有泛型的话,List、Set、Tree这些常见的基础性数据类型的接口就只能很丑陋:放进去的对象是一个具体的类型 , 取出来之后成了无类型的interface{}(可以视为所有类型的基础类型) , 还得强制类型转换之后才能继续使用,令人无语 。Go语言缺少min、max这类函数 , 求数值绝对值的函数abs只接收/返回双精度小数类型 , 排序接口只能借助sort.Interface无奈的回避了被比较对象的类型 , 等等等等 , 都是没有泛型导致的结果 。没有泛型 , 接口很难优雅起来 。Go开发者没有明确拒绝泛型 , 只是说还没有找到很好的方法实现泛型(能不能学学已经开源的语言呀) 。现实是,Go 1.0已经定型,泛型还没有 , 那些丑陋的接口为了保持向后兼容必须长期存在着 。
Go有自己的哲学, 如果能有和目前哲学不冲突的泛型实现, 他们是不会反对的.
如果只是简单学学(或者叫抄袭)已经开源的语言的语法, 那是C++的设计风格(或者说C++从来都是这样设计的, 有什么特性就抄什么), 导致了各种脑裂的编程风格.
编译时泛型和运行时泛型可能是无法完全兼容的, 看这个例子:
type AdderT interface {
Add(a, b T) T
}
如何实现支持数亿用户的长连消息系统此文是根据周洋在【高可用架构群】中的分享内容整理而成,转发请注明出处 。
周洋,360手机助手技术经理及架构师 , 负责360长连接消息系统 , 360手机助手架构的开发与维护 。
不知道咱们群名什么时候改为“Python高可用架构群”go语言延迟释放了 , 所以不得不说 , 很荣幸能在接下来的一个小时里在Python群里讨论golang....
360消息系统介绍
360消息系统更确切的说是长连接push系统,目前服务于360内部多个产品,开发平台数千款app,也支持部分聊天业务场景,单通道多app复用,支持上行数据,提供接入方不同粒度的上行数据和用户状态回调服务 。
目前整个系统按不同业务分成9个功能完整的集群,部署在多个idc上(每个集群覆盖不同的idc),实时在线数亿量级 。通常情况下,pc,手机,甚至是智能硬件上的360产品的push消息 , 基本上是从我们系统发出的 。
关于push系统对比与性能指标的讨论
很多同行比较关心go语言在实现push系统上的性能问题 , 单机性能究竟如何,能否和其他语言实现的类似系统做对比么?甚至问如果是创业,第三方云推送平台,推荐哪个?
其实各大厂都有类似的push系统,市场上也有类似功能的云服务 。包括我们公司早期也有erlang,nodejs实现的类似系统,也一度被公司要求做类似的对比测试 。我感觉在讨论对比数据的时候,很难保证大家环境和需求的统一,我只能说下我这里的体会 , 数据是有的 , 但这个数据前面估计会有很多定语~
第一个重要指标:单机的连接数指标
做过长连接的同行 , 应该有体会,如果在稳定连接情况下 , 连接数这个指标 , 在没有网络吞吐情况下对比,其实意义往往不大,维持连接消耗cpu资源很?。刻趿觮cp协议栈会占约4k的内存开销,系统参数调整后,我们单机测试数据 , 最高也是可以达到单实例300w长连接 。但做更高的测试,我个人感觉意义不大 。
- 将数据保存到文件中c语言 将数据保存到mongodb
- 罗布人村天气 mysql语言具有的功能
- redis编程语言 redis对应c语言
- redis一般和什么语言一起开发 和redis类似的编程
- mongodb删除数据不释放空间 mongodb如何彻底卸载
- mongodb采用什么语言 mongodb的设计采用什么
- c连接mysql数据库 c连接mysql报错
- redis zset 延迟队列 redis延迟执行
- mongodb底层数据结构 mongodb底层语言
- redis主主同步延迟
