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 的认识的更多相关文章

  1. erlang,elixir安装

    erlang下载地址:https://packages.erlang-solutions.com/erlang/ elixir(precompile版)下载地址:https://github.com/ ...

  2. Erlang/Elixir精选Q&A

    精选的定位是什么? 已至2019年,Erlang/Elixir中文社区还是一座黑暗森林,每个技术人都怀揣着自己独有的葵花宝典独自摸索,没有一个开放的分享平台,大量优质文章没有得到该有的关注. 与此同时 ...

  3. Erlang/Elixir: 使用 OpenCV, Python 搭建图片缩略图服务器

    这篇文章是在OSX上测试和运行的的, Ubuntu下的安装和配置请移步到这里 应用程序进程树, 默认 Poolboy 中初始化10个用于处理图片的 Python 工作进程(Worker) 首先安装Op ...

  4. Erlang/Elixir精选-第3期(20191216)

    2019年,Erlang社区在应用层上除了aeternity区块链让人印象深刻(Killer App)外,就没有特别出彩的应用出现.在Web,IoT,MessageQueue这些成熟领域,已经有相当成 ...

  5. Erlang/Elixir精选-第4期(20191223)

    精选文章 A digital symphony - The architecture of API Fortress. 使用Actor模型来支持基于微服务的大规模分布式软件架构.用实例解释了Actor ...

  6. Erlang/Elixir精选-第1期

    第1期(20191202) 文章 A short guide to the structure and internals of the Erlang distributed messaging fa ...

  7. Erlang/Elixir精选-第2期(20191209)

    Spot The Discrepancies with Dialyzer for Erlang. 如何在大型Erlang项目中从零开始一步步践行Dialyzer. Which companies ar ...

  8. Erlang/Elixir精选-第6期(20200113)

    精选文章 Implementing languages on the Erlang VM. -Robert Virding. 因为视频没有显示PPT,PPT可以在点击这里下载. leex - lexi ...

  9. Erlang/Elixir精选-第5期(20200106)

    The forgotten ideas in computer science-Joe Armestrong 在2020年的第一期里面,一起回顾2018年Joe的 The forgotten idea ...

随机推荐

  1. 使用ThreadSanitizer线程检查工具

    ThreadSanitizer又叫TSan,是一个检查线程Data Race的C/C++工具.它集成在新版的gcc和clang中,通过编译时加-fsanitize=thread,可以在运行时检测出Da ...

  2. paip. 定时 关机 休眠 的总结

    paip. 定时 关机 休眠 的总结 //////////////////title bat shell 批处理日期时间的使用比较. bat shell 批处理if else 多行.. 作者Attil ...

  3. 配置nginx 高并发 php

    user www www; // nginx在运行时使用哪个账号的权限,每一个服务都以一个普通的账号的权限来运行,不要以root来运行 worker_processes 2; // 开启进程数,CPU ...

  4. JavaWeb学习总结(二)——Tomcat服务器学习和使用(一)

    一.Tomcat服务器端口的配置 Tomcat的所有配置都放在conf文件夹之中,里面的server.xml文件是配置的核心文件. 如果想修改Tomcat服务器的启动端口,则可以在server.xml ...

  5. Fiddler 修改返回内容 OnBeforeResponse 无效 没用

    Fiddler自定义脚本可以实现很强大的内容替换,包括很有意义的——修改返回内容. 具体的方法可以参考官网:http://docs.telerik.com/fiddler/KnowledgeBase/ ...

  6. Leetcode 204 Count Primes 数论

    题意:统计小于n的质数个数. 作为一个无节操的楼主,表示用了素数筛法,并没有用线性素数筛法. 是的,素数筛法并不是该题最佳的解法,线性素数筛法才是. 至于什么是素数筛法,请百度吧. class Sol ...

  7. CreateJSのTweenJS、SoundJS、PreloadJS

    TweenJS基础实例: var canvas = document.getElementById('myCanvas'), stage = new createjs.Stage(canvas); v ...

  8. spl_autoload_register装在函数的正确写法

    AutoLoading\loading <?php namespace AutoLoading; class Loadind { public static function autoload( ...

  9. Android系统分区理解及分区目录细解

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...

  10. 转:RTMPDump源代码分析

    0: 主要函数调用分析 rtmpdump 是一个用来处理 RTMP 流媒体的开源工具包,支持 rtmp://, rtmpt://, rtmpe://, rtmpte://, and rtmps://. ...