zoukankan      html  css  js  c++  java
  • 【转载】游戏并发编程的讨论 & Nodejs并发性讨论 & 语法糖术语

    知乎上这篇文章对于游戏后端、性能并发、nodejs及scala等语言的讨论,很好,值得好好看。

    https://www.zhihu.com/question/21971645

    经常了解一些牛逼技术人员的分享,比闭门造车或者停留在陈旧技术固步自封,要好多了。

    下面是一些摘录:

    用C++开发,1000并发是基本。
    C++的优点是与硬件近,所以处理图形时速度快很多,
    如果是处理业务,其实主要是看选用的算法的时间复杂度。
    
    各语言之间的执行效率差别没那么大,同样用过C++跟JAVA,相比较的话JAVA的学习曲线更低,开发效率更高,更推荐用JAVA来做服务器。
    当然其它语言像GO,ERLANG,PHP做服务器的也蛮多的。
    因为让OS处理程序逻辑切换得反复陷入内核,有的人觉得这样太慢,做了一些处于user space的线程,进程内自己控制多个逻辑流。
    因为语言描述能力的限制,在C/C++上面写还有用这种东西都太麻烦。于是产生了erlang, go, lua里面的coroutine语法糖。
    注意这一点,每次我会运行一个任务,直到它完成或者是发生io调用都不会主动切换至其他的程序流。
    那么如果这一个任务里面涉及过于大量的计算,那么整个地图进程都会被block在这里。 而正因为node.js是异步的,所以需要不断的写回调监听io完成的信号。单个任务的逻辑流会多次的被打断。
    当任务变得相当复杂的时候,即有所谓的callbak hell,会带给调试开发非常大的麻烦。
    1. 异步
    你提到scala,nodejs,它们的开发模式是异步的。c++也可以写成异步的,近三年内,我写了不下20w行,超过50个c++做的异步服务器,其中还包括存储。
    你的取舍应该是你的团队和项目复杂度,在使用c++之后,还能否快速迭代。如果复杂度太高,我也建议使用go语言 2. 还是异步 nodejs是函数式的异步,协程是同步的代码,执行流程却是异步的。go和lua,erlang都是原生支持它,c++也可以,还是团队能力和复杂度的取舍。
    go也是系统级的语言,能和c代码互调,能力区间很大
    3. 性能取舍 scala是跑在jvm上面的,性能你懂。nodejs是js代码,运行之前先编译,性能会比前者好一些,使用体验来看,性能和c++还是有距离。
    一些它没提供接口的系统能力,你就用不到了,束手束脚。c++啥都能做,就是复杂些。 就你提到的两个c++的复杂的地方,nodejs和scala上也不见得简单。有朋友写了一个nodejs svr,有内存占用的问题,相当于内存泄漏,只能定时重启解决。
    对象的生命周期问题,不是高手,也搞不定
    4. 还是性能取舍 c++是快。但是国内的绝大多数程序员写的程序慢,更多的,是自己糟糕的code能力搞出来的。使用c++语言,高手换java做同样的事情也能比它快很多。
    所以,核心问题还是你们开发团队的人,他们的团队合作以及单兵作战的能力。
    论个人实力,国内的程序员,能赶上google平均水平的非常少,思考问题的方式,自然要作调整。要更关注团队本身在语言上的适应度,而不是只论语言本身能否做某件事情。

    语法糖:

    语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会。
    
    举个例子:在C语言里用a[i]表示*(a+i),用a[i][j]表示*(*(a+i*数组a第二维的长度)+j),由此可见语法糖不是“现代语言”独有,这种写法简洁明了,容易被人理解。
    
    比如Erlang, Go, Lua里面的Coroutine。
  • 相关阅读:
    老司机心得之时间管理"入坑"
    shell的字符串和数字的转化(数字自动做字符串处理,变量名做字符串输出用单引号)
    shell的date命令:使用方法,以及小时、分钟的计算
    一篇详细的linux中shell语言的字符串处理
    linux的string操作(字符串截取,长度计算)
    linux下数学运算器:expr命令(shell中完成数学运算)
    shell脚本格式的几点注意:格式严格,空格不能随便出现(一写就记不住)
    vim的颜色修改,高亮设置。
    pyhton exit
    python判断类型:想知道一个对象(实例或者变量)是什么类型,什么结构的
  • 原文地址:https://www.cnblogs.com/charlesblc/p/5976566.html
Copyright © 2011-2022 走看看