知乎上这篇文章对于游戏后端、性能并发、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语法糖。
注意这一点,每次我会运行一个任务,直到它完成或者是发生i\o调用都不会主动切换至其他的程序流。
那么如果这一个任务里面涉及过于大量的计算,那么整个地图进程都会被block在这里。 而正因为node.js是异步的,所以需要不断的写回调监听i\o完成的信号。单个任务的逻辑流会多次的被打断。
当任务变得相当复杂的时候,即有所谓的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。

【转载】游戏并发编程的讨论 & Nodejs并发性讨论 & 语法糖术语的更多相关文章

  1. Java并发编程系列-(5) Java并发容器

    5 并发容器 5.1 Hashtable.HashMap.TreeMap.HashSet.LinkedHashMap 在介绍并发容器之前,先分析下普通的容器,以及相应的实现,方便后续的对比. Hash ...

  2. Java并发编程入门与高并发面试(三):线程安全性-原子性-CAS(CAS的ABA问题)

    摘要:本文介绍线程的安全性,原子性,java.lang.Number包下的类与CAS操作,synchronized锁,和原子性操作各方法间的对比. 线程安全性 线程安全? 线程安全性? 原子性 Ato ...

  3. 并发编程学习笔记(10)----并发工具类CyclicBarrier、Semaphore和Exchanger类的使用和原理

    在jdk中,为并发编程提供了CyclicBarrier(栅栏),CountDownLatch(闭锁),Semaphore(信号量),Exchanger(数据交换)等工具类,我们在前面的学习中已经学习并 ...

  4. [并发编程 - socketserver模块实现并发、[进程查看父子进程pid、僵尸进程、孤儿进程、守护进程、互斥锁、队列、生产者消费者模型]

    [并发编程 - socketserver模块实现并发.[进程查看父子进程pid.僵尸进程.孤儿进程.守护进程.互斥锁.队列.生产者消费者模型] socketserver模块实现并发 基于tcp的套接字 ...

  5. 聊聊高并发(十九)理解并发编程的几种"性" -- 可见性,有序性,原子性

    这篇的主题本应该放在最初的几篇.讨论的是并发编程最基础的几个核心概念.可是这几个概念又牵扯到非常多的实际技术.比方Java内存模型.各种锁的实现,volatile的实现.原子变量等等,每个都可以展开写 ...

  6. 【并发编程】Java对并发编程的支持历史

    本博客系列是学习并发编程过程中的记录总结.由于文章比较多,写的时间也比较散,所以我整理了个目录贴(传送门),方便查阅. 并发编程系列博客传送门 本文转载,原文请点击链接 本章主要对Java并发(Con ...

  7. 《Java并发编程的艺术》并发编程的挑战(一)

    并发编程的挑战 并发编程的初衷是让程序运行的更快,但是更多的使用多线程真的会让程序变快吗? 1.线程上下文切换 关于线程上下文切换 多个线程在一个处理器里并不是同时进行的,而是非常快速地在线程之间进行 ...

  8. Java并发(二)—— 并发编程的挑战 与 并发机制的底层原理

    单核处理器也可以支持多线程,因为CPU是通过时间片分配算法来循环执行任务 多线程一定比单线程快么?不一定,因为线程创建和上下文切换都需要开销. 如何减少上下文切换 无锁并发编程 CAS算法 使用最少线 ...

  9. Android并发编程 原子类与并发容器

    在Android开发的漫漫长途上的一点感想和记录,如果能给各位看官带来一丝启发或者帮助,那真是极好的. 前言 上一篇博文中,主要说了些线程以及锁的东西,我们大多数的并发开发需求,基本上可以用synch ...

随机推荐

  1. bzoj 1251 裸splay

    裸的splay,只需要注意 max[-1]:=-maxlongint 就行了,否则在update的时候子节点的 max值会在max[-1]里选 /*************************** ...

  2. hdu 2112 HDU Today (最短路)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2112 题目大意:给出起点和终点,然后算出最短的路. 不过有好多细节要注意: (1)起始点和终止点相等的 ...

  3. npm install 报node-sass错误

    Node Sass could not -bit with Node.js .x Found bindings for the following environments: - OS X -bit ...

  4. 【IDEA】设置类头注释和方法注释

    idea和eclipse的注释还是有一些差别的. 类头注释: 打开file->setting->Editor->Filr and Code Templates->Include ...

  5. python学习笔记 协程

    在学习异步IO模型前,先来了解协程 协程又叫做微线程,Coroutine 子程序或者成为函数,在所有语言中都是层级调用,比如a调用b,b调用c.c执行完毕返回,b执行完毕返回,最后a执行完毕返回 所以 ...

  6. 什么是SVC模式【转】

    转自:http://blog.csdn.net/jobsss/article/details/7548550 版权声明:本文为博主原创文章,未经博主允许不得转载. ARM 处理器有二十七个寄存器,其中 ...

  7. wscript运行js文件

    wscript运行js文件 http://www.cnblogs.com/jxgxy/archive/2013/09/20/3330818.html wscript运行js文件 wscript  ad ...

  8. zabbix mysql自动发现规则

    1.配置mysql,添加监控用的账号,授予查看所有用户线程/连接的权限 GRANT PROCESS ON *.* TO 'zabbix'@'127.0.0.1' identified BY '20c1 ...

  9. 原创 gif png bmp jeg 显示方法

    /// <summary> /// 注意不要忘记引用那几个图片单元哦,除了bmp格式不需要引用任何单元, /// 其它图片格式都需要引用对应的图片单元 /// png ---> Vc ...

  10. hdu 3304(直线与线段相交)

    Segments Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12042   Accepted: 3808 Descrip ...