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. KALI LINUX WEB 渗透测试视频教程—第十九课-METASPLOIT基础

    原文链接:Kali Linux Web渗透测试视频教程—第十九课-metasploit基础 文/玄魂 目录 Kali Linux Web 渗透测试视频教程—第十九课-metasploit基础..... ...

  2. 冲刺阶段 day1

    Day 1 项目进展: 通过之前的项目学习,我们已经对我们的耿丹师生基本信息系统项目有了一个方向,又通过昨天和今天的站立会议,大体的编程安排也已经确定了下来,按照之前的编程分工,大家已经开始进行.首先 ...

  3. MMM互助金融/理财源码

    1.1.1MMM互助金融配比系统源码销售 (3mphp.com/mmm-office.com) 联系QQ: 3375551869,全套源码,包含: 1 源码:安装.开发文档 2 数据库:含演示数据,自 ...

  4. 进程状态转换、CPU调度算法

    进程的状态转换 进程在运行中不断地改变其运行状态.通常,一个运行进程必须具有以下三种基本状态. 进程状态 执行态run:进程正在使用CPU 等待态wait:进程正在等待I/O完成,不在使用也不能使用C ...

  5. mysql join 查询图

    mysql join 查询,特别是对查两个表之间的差集,可以用table字段=null来做. 注意千万不是join on XX!=XX  ,这样出来的结果是错误的.

  6. atitit.插件体系设计总结o73.doc

    1. 两大类型:微内核(级联树形结构)与巨内核(管理容器,并联结构). 1 2. 通用插件接口 1 3. 插件的绑定and 初始化 2 4. 微内核插件平台设计 2 5. 参考 2 1. 两大类型:微 ...

  7. IOS开发之控件篇UITabBarControllor第一章 - 介绍

    UITabBarControllor的基本样子 官方有个图介绍这个TabBar的结构,我们先来看看这个结构图 --------------------------------------------- ...

  8. JS的event对象--知识点总结

    Event描述:event代表事件的状态,例如触发event对象的元素.鼠标的位置及状态.按下的键等等. 需要注意的是:event对象只在事件发生的过程中才有效. event的某些属性只对特定的事件有 ...

  9. php: zend server 安装及相关配置

    运行安装文件(ZendServer-CE-php-5.3.2-5.0.1-Windows_x86.exe)开始安装,选项请参照我的选择. 这里不做改动,维持默认选择即可 点击Browse按钮更改安装目 ...

  10. iptables防火墙原理详解

    1. netfilter与iptables Netfilter是由Rusty Russell提出的Linux 2.4内核防火墙框架,该框架既简洁又灵活,可实现安全策略应用中的许多功能,如数据包过滤.数 ...