由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - FMP 一个完整可运行的范例程序
相关主题
FMP mini profile码工如果只认准一种语言, 要想一辈子有工作保障是不可能
FMP 3.0 Mitbbs 首发 — 求建议求反馈OOP胜出是因为object而不是class
objects status snapshot怎么做Object-Oriented Programming is Bad
FMP tutorial请教一个python OOP 实现的问题
FMP vs ExecutorService/FutureFP的可读性是最大问题
Restaurant Reservation System...FMP 进驻 Programming 版
JS就应该杜绝OOPjava update main UI from child thread issue (转载)
oop还是跟fp是对立的FMP supports UI thread in both Swing and SWT
相关话题的讨论汇总
话题: fmp话题: 000话题: 范例话题: 程序话题: fmpmain
进入Programming版参与讨论
1 (共1页)
o**2
发帖数: 168
1
MITBBS只允许贴image file附件,所以我只好把范例程序临时挂在FMP的站上(至少一
周吧)。一共有四个文件,三个Java程序和一个FMP的jar。
OOP style:
http://fastmessenger.com/files/mitbbs20130519/OopMain.java
http://fastmessenger.com/files/mitbbs20130519/Calculator.java
FMP style:
http://fastmessenger.com/files/mitbbs20130519/fmp-for-java-2013 (有dor jar文件ext name)
http://fastmessenger.com/files/mitbbs20130519/FmpMain.java
http://fastmessenger.com/files/mitbbs20130519/Calculator.java
o**2
发帖数: 168
2
这个范例展示的是FMP其中的一个feature: callFunction()。其实展示的内容和前两天
给出的代码片断是一样的,不过这里的是完整的、大家可以在自己的机器上运行的范例。
通过这个范例,大家可以观察:
1) 分别运行OopMain和FmpMain,visual地比较CPU的usages。
2) 比较OopMain和FmpMain源程序的异同。
3) FMP的灵活性,和其本身的大小(大约20K的jar,Java版的源码也就是900行)。
FMP把callFunction()设计成一个普通method call的replacement,当这个method本身
是相当独立的,就象这个范例展示的一样。
o**2
发帖数: 168
3
贴一下在我机器上的运行结果
OopMain
=======
Computing Fibonacci(5,000,000) ...
F(5,000,000) = 01537B41EBC050D32C62 ... 91D4E3B63F87A1EF7A45
Total time: 17831 ms.
FmpMain
=======
Computing Fibonacci(5,000,000) ...
F(5,000,000) = 01537B41EBC050D32C62 ... 91D4E3B63F87A1EF7A45
Total time: 9111 ms.
n***e
发帖数: 723
4
其实c#的语法糖现在很牛的,有await,parallel,task之类的东西。
大概你做的东西可能和这两个比较像?
Task.WaitAll
http://msdn.microsoft.com/en-us/library/dd270695.aspx
Task.WhenAll
http://msdn.microsoft.com/en-us/library/hh194874.aspx
不知道java/scala,但是应该也有相应的语法糖吧?这个二爷应该比较清楚。
不过怎么说呢,虽然有点重复造轮子的赶脚,但你这种实现方法还是蛮有意思的。
b***i
发帖数: 3043
5
比较时间没有意义啊,用已有的各类framework比才有意义。比如我的程序全面多线程
,连打开文件那个〇penDialog都不直接打开文件而是开始一个线程。所以真正要比的
是你新的语法是否更直观简洁

【在 o**2 的大作中提到】
: 贴一下在我机器上的运行结果
: OopMain
: =======
: Computing Fibonacci(5,000,000) ...
: F(5,000,000) = 01537B41EBC050D32C62 ... 91D4E3B63F87A1EF7A45
: Total time: 17831 ms.
: FmpMain
: =======
: Computing Fibonacci(5,000,000) ...
: F(5,000,000) = 01537B41EBC050D32C62 ... 91D4E3B63F87A1EF7A45

o**2
发帖数: 168
6
在这个特例上,FMP的使用方法的确和C#/Java的Task有类似之处。(顺便问一句,你是
做C#的吗?FMP也是有C#版的。)
所以我特意在FmpMain里面埋了个包袱,就是Object[] implObjs = new Object[3];
你有兴趣的话不妨试试把这个3改成其它的数字,比如1,2,4,5,6等,看看有什么区
别。应该会体会到FMP和Task有很大的不同。

【在 n***e 的大作中提到】
: 其实c#的语法糖现在很牛的,有await,parallel,task之类的东西。
: 大概你做的东西可能和这两个比较像?
: Task.WaitAll
: http://msdn.microsoft.com/en-us/library/dd270695.aspx
: Task.WhenAll
: http://msdn.microsoft.com/en-us/library/hh194874.aspx
: 不知道java/scala,但是应该也有相应的语法糖吧?这个二爷应该比较清楚。
: 不过怎么说呢,虽然有点重复造轮子的赶脚,但你这种实现方法还是蛮有意思的。

o**2
发帖数: 168
7
这个比较不是为了定量地看谁快。首先,FMP号称no thread concurrency,所以使用
FMP的程序不需要直接使用thread,那我就要给个结果,证明FMP的程序的确并发了。
其次,就是我在上面回复中提到的参数 3 的作用。有结果显示的话,方便比较不同参
数的不同效果。
你说的“比如我的程序全面多线程 ,连打开文件那个OpenDialog都不直接打开文件而
是开始一个线程”涉及到了FMP的另一个优点,我在这里简单提一下,因为超出了本
post的scope。那就是messenger非常简单(我写的reference implementation只有900
行Java代码),用户可以自己定制的messenger。比如可以做一个给Swing程序用的
SwingMessenger(我以前提供过,以后也会再提供),然后在注册receiver的时候注明
这个receiver是用普通thread的,还是Swing thread的:
1) messenger.registerReceiver();
2) messenger.registerSwingReceiver();

【在 b***i 的大作中提到】
: 比较时间没有意义啊,用已有的各类framework比才有意义。比如我的程序全面多线程
: ,连打开文件那个〇penDialog都不直接打开文件而是开始一个线程。所以真正要比的
: 是你新的语法是否更直观简洁

o**2
发帖数: 168
8
这个参数 3 涉及了FMP的重要概念,就是active object。在FmpMain里面"calculator"
就是一个active object。FMP对调用和被调用的objects来说,都是no thread的,当然
messenger属于FMP系统object,最后还是要用thread来实现active object的。
FMP赋予了active object并发的语义:一个activeobject可以是一个single worker(
就是sequential programming);也可以是一个team of workers(就是多个独立的
sequential programming)。所以这个 3 是head count的意思。
在computeDijkstraFormula()里,每次调用"calculator:multiply" 3次,也就是说
这个算法的最大并发数是 3。于是参数 1 等于单个worker; 2 等于 a team of 2
workers; 速度也随之增快。但超过 3 之后,就不能在加快了。
对于调用和被调用的objects来说,这都是透明的,属于配置设计。
1 (共1页)
进入Programming版参与讨论
相关主题
FMP supports UI thread in both Swing and SWTFMP vs ExecutorService/Future
FMP 已经在 maven central repository 里了Restaurant Reservation System...
FMP for concurrent programming 招生(免费辅导)JS就应该杜绝OOP
写thread safe程序现在也是程序员必须要掌握的了吧oop还是跟fp是对立的
FMP mini profile码工如果只认准一种语言, 要想一辈子有工作保障是不可能
FMP 3.0 Mitbbs 首发 — 求建议求反馈OOP胜出是因为object而不是class
objects status snapshot怎么做Object-Oriented Programming is Bad
FMP tutorial请教一个python OOP 实现的问题
相关话题的讨论汇总
话题: fmp话题: 000话题: 范例话题: 程序话题: fmpmain