`
erwinbarton
  • 浏览: 12656 次
  • 性别: Icon_minigender_1
  • 来自: 佛山
社区版块
存档分类
最新评论

飞机空中换引擎之cool之零

阅读更多
飞机空中换引擎之cool之零
11年12月2日 下午 11:03:43

**严重声明:该例子来自《Erlang程序设计》16.1
这是热切换代码的简单例子...像erlang或java等的带vm动态语言的话,
随便切换运行中的代码是一件极其容易的事情。
但像c语言的这种静态语言的话只能通过动态装载so的方式来干活了。
写语言的语言,必须是可以随心欲为了...

hot_code.erl
-module(hot_code).
-export([start/2, stop/1, rpc/2, swap_code/2]).

start(Name, Mod)->
    register(Name,
     spawn(fun()->
   loop(Name, Mod, Mod:init())
   end)).
stop(Name)->
    rpc(Name, {stop}).

swap_code(Name, Mod)->
    rpc(Name, {swap_code, Mod}).

rpc(Name, Request)->
    Name! {self(), Request},
    receive
{Name, Response}->
    Response
    end.

loop(Name, Mod, OldState)->
    receive
{From, {swap_code, NewCallBackMod}}->
    From! {Name, ack},
    loop(Name, NewCallBackMod, OldState);
{From, {stop}} ->
    From! {Name, ack};
{From, Request} ->
    {Response, NewState} = Mod:handle(Request, OldState),
    From! {Name, Response},
    loop(Name, Mod, NewState)
    end.

name_server1
-module(name_server1).
-export([init/0, add/2, whereis/1, handle/2]).
-import(hot_code, [rpc/2]).

add(Name, Place)->
    rpc(name_server, {add, Name, Place}).
whereis(Name)->
    rpc(name_server, {whereis, Name}).

init()->
    dict:new().


handle({add, Name, Place}, Dict)->
    {ok, dict:store(Name, Place, Dict)};
handle({whereis, Name}, Dict) ->
    {dict:find(Name, Dict), Dict}.

name_server3
-module(name_server3).
-export([init/0, add/2, whereis/1, handle/2, list_all/0]).
-import(hot_code, [rpc/2]).

add(Name, Place)->
    rpc(name_server, {add, Name, Place}).
whereis(Name)->
    rpc(name_server, {whereis, Name}).
list_all()->
    rpc(name_server, {list_all}).

init()->
    dict:new().

handle({add, Name, Place}, Dict)->
    io:format("added ~p~n", [Name]),
    {ok, dict:store(Name, Place, Dict)};
handle({whereis, Name}, Dict) ->
    io:format("query ~p~n", [Name]),
    {dict:find(Name, Dict), Dict};
handle({list_all}, Dict)->
    io:format("list all~n"),
    {dict:fetch_keys(Dict), Dict}.

Run command in erl:
c(hot_code).
c(name_server1).
hot_code:start(name_server, name_server1).
name_server1:add(joe, “usa”).
name_server1:whereis(joe).
hot_code:swap_code(name_server, name_server3).
name_server3:add(mary, “canada”).
name_server3:list_all().

hot_code 是框架, name_server1 是第一个模块...
start时把第一个版本的name_server register到name_server上,
然后正常的增查服务;
之后,有个无聊的家伙写了版本3的name_server3,多添加了一个功能,
list_all(),这时只需要命令框架swap_code一下。
这样,register到name_server上的代码模块是name_server3,
(在loop()的一次迭代后替换了...如果多个操作并发到loop()??)
然后飞机...换了引擎了。

//++++++++++++++++++++++++++++++
c/java 也可以做到这个挺逗的功能。
c语言,dyn_load so模块
framework.cpp
msg_queue q_cmd;
msg_queue q_resp;
load(const char *fname);
start(void *handle, const char *fname){
handle = load(fname);
loop(...);
}
swap_code(const char *fname){
push(q_cmd, “{swap, fname}”)
}
loop(...){
while( true){
msg = pop(q_cmd);
switch(msg){
“{swap, fname}”: handle=load(fname); push(q_resp, “ack”); break;
“{call, func_name, ...}”: ret = handle:handle(“func_name”, ...);  push(q_resp, ret); break;
}
}
}

name_server1.cpp
func_a(...);
func_b(...);
handle(“func_name”, args){
switch(“func_name”){
“a”: func_a(args);
“b”: func_b(args);
}
}

Java...just like RPC, and reflect mechanism …

To Be Stupid(TBS)...
分享到:
评论

相关推荐

    CoolEditPro_2.1.3097.0.zip

    今天我们要探讨的是一个名为"CoolEditPro"的工具,其版本号为2.1.3097.0,它是一款强大的音频处理软件,集音频波形分析和格式转换功能于一身,为用户提供了一站式的解决方案。 首先,让我们深入了解CoolEditPro的...

    era.rar_Cool_ERA_era游戏引擎

    在这个压缩包的"era"子文件中,我们可以找到IRR引擎在UI设计上的独特之处。UI(User Interface)设计是游戏体验的重要组成部分,它不仅需要美观,更需要易用性和功能性。IRR引擎提供的UI系统支持自定义布局,允许...

    超级cool的3d游戏引擎,商业版10000美金.

    《超级cool的3D游戏引擎:商业版解析与技术概览》 3D游戏引擎作为游戏开发的核心,一直是技术和创新的焦点。本文将探讨一款名为“超级cool的3D游戏引擎”的商业产品,该引擎自0.3版本起开始商业化,售价高达10000...

    coolboy连接交换系统

    综上所述,"coolboy连接交换系统"可能是一个融合了搜索引擎技术、高效数据交换和智能连接管理的复杂系统,旨在优化网络数据的获取和处理。通过合理的设计和实施,此类系统能够提供高效、可靠的网络服务。

    超级cool的3d游戏引擎

    【超级cool的3D游戏引擎】是一款专为游戏开发者打造的高级软件,它结合了现代计算机图形学的先进技术,能够帮助开发出具有高度沉浸感和真实感的三维游戏。这款引擎以其卓越的性能、易用性和灵活性而备受赞誉,尤其在...

    cooleditpro2.1出现MISSING RESAMPLE.XMF文件用该文件替换即可

    《解决cooleditpro2.1“MISSING RESAMPLE.XMF”问题的详细步骤》 在数字音频编辑领域,Cool Edit Pro 2.1是一款深受用户喜爱的软件,其功能强大,操作界面友好。然而,有时用户在使用过程中可能会遇到“MISSING ...

    Cool Edit pcm文件播放,音频编辑,音频文件格式转换

    在IT领域,音频处理是一项重要的任务,而"酷我编辑"(Cool Edit)是一款曾经非常流行的音频编辑软件,尤其适用于对PCM(脉冲编码调制)文件进行播放和编辑,以及进行音频文件格式的转换。在本文中,我们将深入探讨...

    好用的cool2.1

    《好用的cool2.1:探索cooledit音频处理与制作的魅力》 在音频编辑领域,Cool Edit Pro,现在被称为Adobe Audition,是一款备受推崇的专业级音频处理软件。...下载并体验cool2.1,开启你的音频创作之旅吧!

    超级cool的3d游戏引擎,商业版10000美金

    《超级cool的3D游戏引擎:商业价值与技术解析》 3D游戏引擎,作为现代游戏开发的核心技术,一直是游戏开发者关注的焦点。本文将深入探讨一款被誉为“超级cool”的3D游戏引擎,该引擎因其卓越的效果和商业潜力,吸引...

    Cool Edit Pro 中文绿色

    Cool Edit Pro是一款经典的数字音乐编辑软件,它在早期的音频处理领域拥有广泛的用户基础。这款软件以其丰富的功能和直观的操作界面深受音乐制作人和声音编辑爱好者的喜爱。"中文绿色"版本指的是该软件已被汉化为...

    coolEdit(内含Resample.xfm)

    在音频制作方面,CoolEdit的强大之处在于其丰富的工具集。用户可以进行多轨录制,同时编辑多个音轨,实现完美的音效融合。内置的效果器如均衡器、混响、压缩、限幅等,可以对音频进行精细化调整,创造出丰富的音色...

    关于使用cooleditpro调整mp3音量大小的详细过程.pdf

    使用 Cool Edit Pro 调整 MP3 音量大小的详细过程 一、Cool Edit Pro 简介 Cool Edit Pro 是一款功能强大且流行的音频编辑软件,广泛应用于音乐录制、音频编辑、音效处理等领域。该软件提供了多种音频编辑功能,...

    cool edit pro教程

    《酷狗编辑专业版教程》是一份专为学习和掌握音频编辑软件Cool Edit Pro而精心编写的教程。这款软件在多年前就已经备受用户喜爱,尤其在音乐制作、声音处理和录音编辑领域具有广泛的运用。这份教程以exe可执行文件的...

    CoolEdit 密钥 注册机.zip

    Cool Edit Pro是一个非常出色的音乐编辑软件和MP3制作软件,用声音来“绘”制:音调、歌曲的一部分、声音、弦乐、颤音、噪音或是调整静音。而且CoolEdit还提供有多种特效为你的作品增色,放大、降低噪音、压缩、扩展...

    CoolEdit PRO 2.0注册机

    CoolEdit PRO 2.0注册机 --==Cool Edit Pro 2.0 注册程序==-- Name: Peter Quistgard Serial : 200-00-37YQOQ7L

    【cool edit pro】音频视频编辑软件

    【cool edit pro】音频视频编辑软件【cool edit pro】音频视频编辑软件【cool edit pro】音频视频编辑软件【cool edit pro】音频视频编辑软件【cool edit pro】音频视频编辑软件【cool edit pro】音频视频编辑软件...

    coolEdit地图编辑器

    自定义数据格式的功能意味着"coolEdit"支持导入和导出各种自定义格式的地图文件,可以与其他软件或游戏引擎无缝对接。开发者可以通过编写脚本或使用内置的导出工具,将地图数据转换为特定的格式,适应不同的项目需求...

    CPUCOOL 降温 优化

    "CPUCOOL"是一个专门为解决这个问题设计的软件,旨在帮助用户优化和控制计算机的CPU温度,确保系统的稳定运行。 CPUCOOL的主要功能包括: 1. 实时监控:CPUCOOL能够实时监控CPU的温度,提供准确的温度读数,让用户...

    coolEdit中文版

    《酷狗编辑器CoolEdit中文版:音频处理的利器》 在数字音频处理的世界里,CoolEdit是一款备受赞誉的软件,而其中文版更是为中国用户提供了极大的便利。本篇文章将详细解析这款软件的功能特点,以及如何在Win10系统...

Global site tag (gtag.js) - Google Analytics