首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

thrift和erl_nif效率下的比较

2012-09-01 
thrift和erl_nif效率上的比较? ? ? thrift是通用型的,可以完成多种编程语言之间的交互,erl_nif是专用型的,

thrift和erl_nif效率上的比较

? ? ? thrift是通用型的,可以完成多种编程语言之间的交互,erl_nif是专用型的,主要完成Erlang和C语言之间的交互。thrift可以完成远程节点之间的交互,但是erl_nif只能完成本地的交互。

  正因为thrift完成的是远程节点之间的交互,(thrift在facebook设计指出,主要的目的就是完成facebook数据中心中不同编程语言之间的交互)它在处理本地交互时,同样会看作是远程的方式进行工作;erl_nif的运行中,省去了远程节点的通信。所以,thrift的运行性能不如erl_nif的运行性能。

  但是,如果要完成远程节点之间的语言交互,使用erl_nif,也不见得有多大优势。首先,远程之间之间的交互,必然要使用通信,就算是用原生的socket进行通信,性能上面而言,优势也甚微。但是,如果使用这种方式,开发效率就大大的降低了。

  所以,如果在本地要完成C语言和Erlang语言之间的交互的话,使用erl_nif是没有错的(使用指南,可以google一下),但是如果要完成远程节点之间多编程语言的交互,选择thrift在一定程度上,还是要比erl_nif好。

?

贴出thrift完成CPP+Erlang计算100W以内prime的代码

? ? ?CPP端的代码

?

gettimeofday(&start,NULL);client.sendinfo(Mylist);gettimeofday(&end,NULL);long timeuse = 1000000*(end.tv_sec-start.tv_sec)+end.tv_usec-start.tv_usec;cout<<timeuse<<endl;

?测试thrift完成传输需要消耗的时间,1545771微秒,也就是1.5秒左右

3、测试整个过程需要的时间

测试从判断prime到传给erlang 所需要的时间,1876668微秒,1900毫秒左右,和erl_nif完成该工作,相差了1秒左右,(参见:http://www.iteye.com/topic/534368)

?

总结:

? ? ?虽然,thrift和erl_nif运行效率相比,确实不行,但是,thrift完成的多语言交互,可以轻松部署到远程节点,不仅如此,开发效率还要比erl_nif稍胜一筹(个人观点)。

? ? ?君子性非异也,善假于物也。

热点排行