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的方便之处,在异步的操作过程中,一般做法就是调用-》回调-》调用-》回调…,这种嵌套的调用代码书写很麻烦,使用协程可以方便的在一个函数内实现异步调用,挂起等待结果回调的同步效果;
Skynet Pomelo Erlang Elixir 的认识的更多相关文章
- erlang,elixir安装
erlang下载地址:https://packages.erlang-solutions.com/erlang/ elixir(precompile版)下载地址:https://github.com/ ...
- Erlang/Elixir精选Q&A
精选的定位是什么? 已至2019年,Erlang/Elixir中文社区还是一座黑暗森林,每个技术人都怀揣着自己独有的葵花宝典独自摸索,没有一个开放的分享平台,大量优质文章没有得到该有的关注. 与此同时 ...
- Erlang/Elixir: 使用 OpenCV, Python 搭建图片缩略图服务器
这篇文章是在OSX上测试和运行的的, Ubuntu下的安装和配置请移步到这里 应用程序进程树, 默认 Poolboy 中初始化10个用于处理图片的 Python 工作进程(Worker) 首先安装Op ...
- Erlang/Elixir精选-第3期(20191216)
2019年,Erlang社区在应用层上除了aeternity区块链让人印象深刻(Killer App)外,就没有特别出彩的应用出现.在Web,IoT,MessageQueue这些成熟领域,已经有相当成 ...
- Erlang/Elixir精选-第4期(20191223)
精选文章 A digital symphony - The architecture of API Fortress. 使用Actor模型来支持基于微服务的大规模分布式软件架构.用实例解释了Actor ...
- Erlang/Elixir精选-第1期
第1期(20191202) 文章 A short guide to the structure and internals of the Erlang distributed messaging fa ...
- Erlang/Elixir精选-第2期(20191209)
Spot The Discrepancies with Dialyzer for Erlang. 如何在大型Erlang项目中从零开始一步步践行Dialyzer. Which companies ar ...
- Erlang/Elixir精选-第6期(20200113)
精选文章 Implementing languages on the Erlang VM. -Robert Virding. 因为视频没有显示PPT,PPT可以在点击这里下载. leex - lexi ...
- Erlang/Elixir精选-第5期(20200106)
The forgotten ideas in computer science-Joe Armestrong 在2020年的第一期里面,一起回顾2018年Joe的 The forgotten idea ...
随机推荐
- 六天玩转javascript:javascript变量与表达式(2)
本系列内容为本人平时项目实践和参照MDN,MSDN,<javascript语言精粹>,<Effective Javascript>等资料,并且整理自己EverNote的日常积累 ...
- ubuntu下使用nginx部署Laravel
问题描述 Laravel是PHP下当今最受欢迎的web应用开发框架,github上start数远超第二名Symfony,以前我用这个框架做项目的时候通常就是扔到apache里面,然后配置.htacce ...
- 在Linux Ubuntu上编译DNX
DNX是.NET Execution Environment,前身是XRE,XRE的前身是KRuntime,项目网址:https://github.com/aspnet/DNX . 签出DNX的代码: ...
- Objective-C入门
厂长最近又有新计划,准备做iOS上的开发,要操作工们(其实就是我自己)学习Objective-C,准备为厂子下一步的发展做出巨大贡献.拿人钱财,替人消灾,又得花时间折腾一门语言.话说自从来到现车间,用 ...
- [MSSQL] Useful SQL Scripts - CalendarBase
Useful SQL scripts DECLARE @StartDate DATETIME DECLARE @EndDate DATETIME DECLARE @FiscalBeginMonth I ...
- jQuery.Callbacks之源码解读
在上一篇jQuery.Callbacks之demo主要说了Callbacks对象初始化常见的选项,这一篇主要分析下Callbacks对象的源代码,对给出两个较为繁琐的demo // String to ...
- Spring依赖注入(IOC)那些事
小菜使用Spring有几个月了,但是对于它的内部原理,却是一头雾水,这次借着工作中遇到的一个小问题,来总结一下Spring. Spring依赖注入的思想,就是把对象交由Spring容器管理,使用者只需 ...
- mysql悲观锁总结和实践
使用场景举例:以MySQL InnoDB为例商品t_goods表中有一个字段status,status为1代表商品未被下单,status为2代表商品已经被下单,那么我们对某个商品下单时必须确保该商品s ...
- atitit.提升稳定性---hibernate 增加重试retry 机制解决数据库连接关闭
atitit.提升稳定性---hibernate 增加重试retry 机制解决数据库连接关闭 1. 流程总结 retry(5times).invoke(xxx).test().rest().$() t ...
- atitit.查看预编译sql问号 本质and原理and查看原生sql语句
atitit.查看预编译sql问号 本质and原理and查看原生sql语句 1. 预编译原理. 1 2. preparedStatement 有三大优点: 1 3. How to look gene ...