知乎上这篇文章对于游戏后端、性能并发、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. 【Python实例二】BeautifulSoup爬虫简单实践

    前言 前面安装了BeautifulSoup库,现在就来实现一下吧. 目录 一.Urllib库的使用 二.BeautifulSoup的使用 三. 一个示例 ----------------------- ...

  2. nginx1.11.9 apt即源码编译各平台测试

    测试系统:ubuntu16.04 server,debian8.7 netinstall,centos7 mini. 系统配置:使用virtualbox安装,内存1G,cpu单核,物理CPU  i5- ...

  3. 8.read读取控制台输入

    read(选项)(参数)选项:-p:指定读取值时的提示符-t:指定读取时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了参数:变量:指定读取时的变量名

  4. C# 正则表达式判断IP,URL等及其解释

    C# 正则表达式判断IP,URL等及其解释 判断IP格式方法: public static bool ValidateIPAddress(string ipAddress) { Regex valid ...

  5. HTML布局相关的CSS样式属性

    # 转载请留言联系 注意,样式属性是写进CSS里面的. 布局常用样式属性: width 设置元素(标签)的宽度,如:width:100px; height 设置元素(标签)的高度,如:height:2 ...

  6. sqlalchemy源代码阅读随笔(4):url。py 阅读

    在_to_string中,有 _rfc_1738_quote(text): 这个函数.这个主要是遵循 RFC 1738的规则.对传入的信息(主要是用户名或者密码)进行格式匹配.其代码就一行: retu ...

  7. ros bashrc 无法source setup.sh

    不知道什么时候开始的,莫名其妙首先是QT闪退,无法找到头文件,然后命令行进去catkin无法提示catkin_make 手动source之后就好了 问题出现在bashrc中source失败了 所以检查 ...

  8. qt include_directories没用

    include_directories之后在.cpp文件中include.h文件没有路径补全说明qt没有找到该.h文件 问题解决: 在add_executable里加入那个.cpp文件就可以了 因为c ...

  9. 最适合2018年自学的web前端零基础系统学习视频+资料

    这份资料整理花了近7天,如果感觉有用,可以分享给更有需要的人. 在看接下的介绍前,我先说一下整理这份资料的初衷: 我的初衷是想帮助在这个行业发展的朋友和童鞋们,在论坛博客等地方少花些时间找资料,把有限 ...

  10. (二)shell变量

    (1)自定义变量 定义变量 变量名=变量值 变量名必须以字母或下划线开头,不能数字开头,区分大小写,ip=114.114.114.114 引用变量: $变量名 ${变量名} 查看变量: echo $变 ...