CERL介绍
来源:互联网 发布:博客平台推荐 知乎 编辑:程序博客网 时间:2024/05/16 16:10
◇ 定义
CERL 这个词的来源是因为他被定为为:
Erlang Model for C++。
目的是在C++中获得Erlang的好处(部分)。
不过,实际上CERL被实现为与语言无关的。
基于CERL,你可以用PHP、Python之类的语言来写服务器或客户端。
CERL是基于Erlang的【分布式模型】。
◇ 优点
实现了Erlang中最重要的几个概念:
Node, Process, Mail (Message)。
他也支持【速错】(Fail fast)及GenServer编程框架。
◇ 缺点
当然,也有它没有做到的,
如:
CERL 不支持轻量级的进程。
尽管CERL的Process模型和Erlang一致,
但是他并不轻量,
事实上CERL的进程就是操作系统中的Thread。
刚开始我准备用协程,
不过后来被证明这是不必要的,
所以CERL永远都不考虑【协程】这东西。
CERL不支持【热部署】。
当然,这是指他没有提供机制支持,而不是指你没法做到。
◇ 结构
CERL对外表现为一个【动态库(cerl.dll)】 + 一个【编译器(sdlc)】。
逻辑上CERL分为两层,底层称为【CERL Core】,上层为【GenServer框架】。
CERL Core
表现为动态库cerl.dll。
主要实现Erlang的分布式模型,及其他辅助基础设施。
GenServer框架。
它主要定义了服务器接口描述语言:
Server Description Language(SDL),
并提供相应的编译器 sdlc 以生成:
客户端如何调用该服务器的Proxy代码。
服务器端Stub代码。
服务器Impl文件的框架代码。
☆ 许式伟之介绍
关于 CERL 库的性能
在没有设定超时的情况下,
CERL 的 performance 大体和 boost asio 相同。
在支持 io timeout 的情况下,
CERL 的 performance 远好于 boost asio。
究其原因是因为 CERL 的定时器做了较大程度的优化,
而 boost asio 的定时器写得只是中规中矩。
CERL 库的基本结构
整个REPO包含5个子项目,
从依赖关系来说,
依次是:
memory:
Boost Memory 库。
这个库因为曾经提交到 Boost Sandbox 中,
所以放在 boost 目录下。
如果我还继续用 C++,
也许会尝试让它进 Boost 库。
这个库早就开源,
最初放在 google code 上,
其最新地址在 https://github.com/xushiwei/memory 。
stdext:
C++ 扩展库。
内容比较杂,
整体可以认为是我在金山时期积累的 KFC 库的重新梳理版。
这个库早就开源,
最初放在 google code 上,
其最新地址在 https://github.com/xushiwei/stdext 。
tpl:
文本处理库。
这个是因为 CERL 里面定义了一门叫 SDL(Server Description Language),
需要实现一个编译器而依赖。
这个库早就开源,
最初放在 google code 上,
其最新地址在 https://github.com/xushiwei/tpl 。
async:
CERL 库的核心。
虽然名字叫 async,
但是它的编程模型是基于 fiber(纤程)写同步的程序。
整个编程理念反对任何地方出现异步代码。
这个库经历了多次演化,
从最初的纯 Erlang Model,
到试图引入预编译器将同步代码翻译成异步代码,
到最后决定基于 fiber(纤程)直接写同步代码(详细见 meeting minutes),
从而最终确定了整个编程哲学。
venus:
基于 async 库写的一个 RPC 框架。
推荐写服务器的标准方式是先写一个 SDL,
然后基于这个 SDL 用 venusc 编译出 Server 端框架和 Client 端的 SDK。
这样实现者只需要在 Server 端框架里面填写业务代码,
Client 端直接基于生成的 SDK 去调用服务器的功能。
关于 SDL 语言的细节,
在 CSDN 博客有详细介绍:http://blog.csdn.net/xushiweizh/article/details/4444942
- CERL介绍
- Erlang vs. CERL - CERL简介
- Erlang vs CERL 简介
- CERL SDL 语法及类型系统
- CERL 2.0 预告:Erlang Style Concurrency + 状态机
- CERL: PHP或Python调用C++实现的服务器
- CERL: 用PHP或Python来做服务器
- CERL2 系列3:CERL既是网络库也是操作系统
- CERL2 系列4:CERL体系与框架概览
- 再谈CERL:详论Go与Erlang的并发编程模型差异
- [ ECUG 专题回顾]《再谈 CERL:详论 GO 与 ERLANG 的并发编程模型差异》-许式伟(七牛云存储 CEO)
- 介绍
- 介绍
- 介绍
- 介绍
- 介绍
- 介绍
- 介绍
- Apache http Server 2.4 安装与配置
- 基于Python-ChatterBot搭建不同adapter的聊天机器人(使用NB进行场景分类)
- bzoj 4874: 筐子放球 并查集
- Python3 安装第三方库 (Mac)
- Hadoop简介(1):什么是Map/Reduce
- CERL介绍
- Java项目开发心得(二):使用EhCache+SSM实现数据缓存
- iOS开发之蓝牙4.0 -- BLE开发
- 微信JS SDK PHP Demo
- WinForm异步:如何:对 Windows 窗体控件进行线程安全调用
- 设计模式之---迭代器模式
- Tensorflow学习:Variable变量
- jmeter使用put方法提交的数据格式
- 使用Connetion的属性RetainSameConnection