Erlang is a general-purpose concurrent, ga--摘自维基百科 词条:Erlangrbage-collected programming language and runtime system. The sequential subset of Erlang is a functional language, with strict evaluation, single assignment, anddynamic typing. For concurrency it follows the Actor model. It was designed by Ericsson to support distributed, fault-tolerant, soft-real-time, non-stop applications. It supports hot swapping, thus code can be changed without stopping a system.[1]
一款多人在线游戏,一个玩家走一步都要把消息广播给同屏的玩家,
却不太容易搞定的的需求:在线玩家列表怎么实现?是啊,
你还会想到"锁".
我尝试过在.net下使用完成端口+TPL库+protocol buffer来完成上面的功能,但是并没有通过测试的检验,
客户端和服务器一对一的收发压力不大,但是一旦开启广播,
飘忽不定,中间加入对象池会得到一定缓解,
吧,
就开始不淡定了.这些都是经过量化分析得出的结果,
需要解决的第二个问题就是并发加锁,
性能的下降,问题此起彼伏.
后续还要解决TCP通信的数据格式,以及粘包等问题......
项目时间紧张,存在的风险很多,
如果使用C++方案,一定能搞出来,
一下语法,还是很惊喜,由于之前对F#有过接触,
- 面向并发,有成熟而且久经考验的框架可供使用,
网络部分已经经过了良好封装 - 内存缓存解决方案ETS,检索时间为常量而且为常量值
- 对二进制数据解析的语法是直观,简单,强大
- 没有共享内存! 没有锁!(我们在代码中没有显示使用锁)
- 控制逻辑简单只有if 和 case ,而且有if没有else,没有continue break goto
- 没有for循环
- 包括kernel库和standlib库在内,
很多函数和变量的命名简直太糟糕了
但是,这些都是可以接受的!一门语言在很多地方备受诟病,
存在着不可替代的优势,而且随着它成为主角那一天,
一遍埋怨,一遍用,浏览器兼容问题,跨域问题,被反反复复解决,
等优秀的开发框架也为常见问题提供了完整的解决方案.
同样,看Erlang现在的局面,使用者较为小众,
何其相似!如果说ajax是javascript的春天,
上他们把处理能力的提升放在了多核上!
后面,我会有专门的文章来比较这两者的使用的解决方案.
这里有两篇很棒的文章:多核编程的难题(一) http://www.parallellabs.com/2010/08/17/the-trouble-with-multicore/
多核编程的难题(二) http://www.parallellabs.com/2010/09/20/the-trouble-with-multicore-2/
P.S: 现在C#在我们团队中主要作用是快速产出各种工具,作为一个.
有兴趣的可以用聊天室模型来检验自己的方案是否有效,
最新评论