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

0 0
原创粉丝点击