问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

golang有哪些不错的游戏服务器框架

发布网友 发布时间:2022-04-21 02:30

我来回答

1个回答

热心网友 时间:2022-04-18 17:01

为什么golang的开发效率高?

golang是一编译型的强类型语言,它在开发上的高效率主要来自于后发优势,不用考虑旧有恶心的历史,又有一个较高的工程视角。良好的避免了程序员因为“ { 需不需要独占一行 ”这种*问题打架,也解决了一部分趁编译时间找产品妹妹搭讪的阶级敌人。

它有自己的包管理机制,工具链成熟,从开发、调试到发布都很简单方便;

有反向接口、defer、coroutine等大量的syntactic sugar;

编译速度快,因为是强类型语言又有gc,只要通过编译,非业务毛病就很少了;

它在语法级别上支持了goroutine,这是大家说到最多的内容,这里重点提一下。首先,coroutine并不稀罕,语言并不能超越硬件、操作系统实现神乎其神的功能。golang可以做到事情,其他语言也可以做到,譬如c++,在boost库里面自己就有的coroutine实现(当然用起来跟其他boost库一样恶心)。golang做的事情,是把这一套东西的使用过程简化了,并且提供了一套channel的通信模式,使得程序员可以忽略诸如死锁等问题。


goroutine的目的是描述并发编程模型。并发与并行不同,它并不需要多核的硬件支持,它不是一种物理运行状态,而是一种程序逻辑流程。它的主要目的不是利用多核提高运行效率,而是提供一种更容易理解、不容易出错的语言来描述问题。


实际上golang默认就是运行在单OS进程上面的,通过指定环境变量GOMAXPROCS才能转身跑在多OS进程上面。有人提到了的pomelo,开源本来是一件很不错的事情,但是基于自己对callback hell的偏见,我一直持有这种态度:敢用nodejs写大规模游戏服务器的人,都是真正的勇士 : ) 。


2、Erlang与Golang的coroutine有啥区别,coroutine是啥?


coroutine本质上是语言开发者自己实现的、处于user space内的线程,无论是erlang、还是golang都是这样。需要解决没有时钟中断;碰着阻塞式i\o,整个进程都会被操作系统主动挂起;需要自己拥有调度控制能力(放在并行环境下面还是挺麻烦的一件事)等等问题。那为啥要废老大的劲自己做一套线程放user space里面呢?

并发是服务器语言必须要解决的问题;

system space的进程还有线程调度都太慢了、占用的空间也太大了。

把线程放到user space的可以避免了陷入system call进行上下文切换以及高速缓冲更新,线程本身以及切换等操作可以做得非常的轻量。这也就是golang这类语言反复提及的超高并发能力,分分钟给你开上几千个线程不费力。


不同的是,golang的并发调度在i/o等易发阻塞的时候才会发生,一般是内封在库函数内;erlang则更夸张,对每个coroutine维持一个计数器,常用语句都会导致这个计数器进行rection,一旦到点,立即切换调度函数。


中断介入程度的不同,导致erlang看上去拥有了preemptive scheling的能力,而golang则是cooperative shceling的。golang一旦写出纯计算死循环,进程内所有会话必死无疑;要有大计算量少i\o的函数还得自己主动叫runtime.Sched()来进行调度切换。


3、golang的运行效率怎么样?


我是相当反感所谓的ping\pong式benchmark,运行效率需要放到具体的工作环境下面考虑。


首先,它再快也是快不过c的,毕竟底下做了那么多工作,又有调度,又有gc什么的。那为什么在那些benchmark里面,golang、nodejs、erlang的响应效率看上去那么优秀呢,响应快,并发强?并发能力强的原因上面已经提到了,响应快是因为大量非阻塞式i\o操作出现的原因。这一点c也可以做到,并且能力更强,但是得多写不少优质代码。


然后,针对游戏服务器这种高实时性的运行环境,GC所造成的跳帧问题确实比较麻烦,前面的大神 @达达 有比较详细的论述和缓解方案,就不累述了 。随着golang的持续开发,相信应该会有非常大的改进。一是屏蔽内存操作是现代语言的大势所趋,它肯定是需要被实现的;二是GC算法已经相当的成熟,效率勉勉强强过得去;三是可以通过incremental的操作来均摊cpu消耗。


用这一点点效率损失换取一个更高的生产能力是不是值得呢?我觉得是值得的,硬件已经很便宜了,人生苦短,让自己的生活更轻松一点吧: )。


4、基于以上的论述,我认为采用go进行小范围的MMORPG开发是可行的。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
css布局绝对定位和相对定位疑惑? 湖北对口单招有哪些大学 湖北单招最好考的学校有哪些 玻璃隔断吗 《八佰》中的南岸刀子,《药神》中的沉默黄毛 有哪些适合新手养的蛇品种推荐? 新手喂养什么宠物蛇比较好? 色叔叔茜色是什么色 仓鼠上窜下跳一直不停,是什么原因? 禽医静心谈鸭黄病毒的主要症状有哪些?鸭子得了黄病毒怎么治疗? golang现在适合写桌面程序吗 为什么觉得生活每天枯燥乏味,怎样能改变现状? web开发JAVA,GO,PHP,Python哪种语言好? Go 语言前景怎么样,有木有需要 Go 程序员的 为什么golang 相对于Java更适合服务器编程 golang相比java的优势在哪 为什么我全力推荐Golang 成都golang好找工作吗 你为什么放弃golang? golang强大在何处,哪些场景更适合使用golang go 语言适合做哪些开发 Golang 比较适合什么领域 怎样让老公对自己有兴趣 如何才能对平常不在意的事物感兴趣? 对生活中的所有事都不感兴趣了怎么办? 404 Not Found 为什么老是开心不起来 很压抑的感觉 对很多事情都提不起兴趣 怎样才能尽快吃到面包? 觉得生活没意思,对什么都不感兴趣怎么办 golang适合做web开发吗 请Golang深度用户说说,现在Golang的性能可以和C比吗 golang可以编写什么 平安银行发短信说发律师函是不是真的 平安银行发短信说发律师函让我确认地址 平安银行代理律师说只还本金结清,但不签协议,可信吗 接到平安银行委托律师函还未还款会被怎样 平安银行委托律师事务所私自调查欠款人的背景违法吗 平安银行请律师要帐会移交公安局吗 平安信用卡逾期三个月被起诉了怎么办 01059303413是北京平安银行律师的吗 平安银行委托律师起诉我,法院会怎么处理?属于诈骗吗? 如果欠平安银行的钱发工资有影响吗 平安银行会让湖南律师事务所打电话来说我六年之前办了信用卡透支了现在银行要起诉我让我还款吗 欠平安银行还有3000律师函发来会是恐吓吗 收到平安银行律师函还款 湖南永雄律师事务所0731-81874248这是湖南永雄的电话吗他们让我还款说是平安银行委托的 我的平安信用卡逾期了,,但是,平安银行拒绝和我协商还款协议,我该怎么办? 如果欠平安银行的钱发工资有影响吗 平安欠款要我去签律师函是否要去?