Skynet Pomelo Erlang Elixir 的认识

1.skynet pomelo(node.js) elixir(erlang) 周末研究总结 手游这两年发展来看,感受对实时性要求愈来愈高,有同事在研究Elixir开发,google得知这东西是基于erlang搞出来的,语法相似ruby; 公司如今客户端采用全cocos2d + c++ + lua,新项目unity3d + c# + lua, lua在产品开发中使用比较频繁,同事了解程度也比较深; 完美状况下天然最好是服务端也使用lua开发,以前就常常发生在服务端ruby代码中写lua的囧像。 周末花了两天时间作了下研究,关于高性能服务器架构的知识;无非就是高性能io处理,多进程多线程模型,透明化分布式,脚本热更新 etc 这些东西; 关于io处理 epoll和windows的iocp,对比select模型,效率对比就是轮询一堆端口:o(n)跟直接注册回调:o(1)的差异; pomelo: 内部使用websocket或者socket.io的实现,内部也是使用epoll实现 skynet: 一样使用epoll/kqueue实现,代码在socket_epoll.c socket_kqueue.c erlang:同skynet 听说erlang 处理1百万个空tcp连接很轻松,这块几个研究对象区别不是特别大; 关于进程线程 pomelo:单进程单线程模型,具体缘由是node.js的实现就是这样的; skynet: 多进程多线程模型; erlang: 单进程多线程模型; pomelo进程之间通讯是经过socket完成(包括同机),每一个进程中都有一个消息循环,rpc都是异步完成,可见效率通常; skynet是单进程内预制n个线程,每一个服务有本身的消息循环,没消息的时候挂起,有消息的时候,选择一个线程来跑服务,消息队列的消息投 递使用原子锁;处于同进程内的服务间,消息通讯效率仍是比较高的,消息能够拷贝也能够不拷贝,建议拷贝; erlang封装了本身的进程概念,实际上相似skynet(实际上是skynet借鉴了erlang vm),每一个进程对应的是操做系统线程, 综上,erlang的设计很好,因此skynet也借鉴了设计,可是介于lua开发的方便性,我的更倾向于skynet; 关于透明化cluster: 这点作的最好的是erlang,由于它在语言层面上就不须要关心物理机器,进程这些东西;skynet在这方面跟pomelo差很少,仍是须要关心物 理机; 关于热更新 erlang和skynet都是能够实现热更新,pomelo新版本中能实现某些逻辑关系不复杂的模块热更新; 其余:lua的coroutine的方便之处,在异步的操做过程当中,通常作法就是调用-》回调-》调用-》回调…,这种嵌套的调用代码书写很麻烦,使用协程能够方便的在一个函数内实现异步调用,挂起等待结果回调的同步效果;
相关文章
相关标签/搜索