erlang读文件的速度为啥这么慢?

问题描述

今天公司技术比武,比赛题目是给一个1.1g的大文本,统计文本中词频最高的前十个词。花了两天用erlang写完了代码,但是放到公司16核的机器上这么一跑,结果不比不知道,一比吓一条。erlang写的代码执行时间花了55秒左右,同事们有的用java,有的用C,还有的用C++,用C最快一个老兄只花了2.6秒,用java的也只用了3.2秒。相比之下erlang的代码,真是一头大蜗牛,太慢了。  但是我想实际**一下,别的都不测,先**一下用erlang遍历完一个1.1G的文本到底要花多久(只遍历,其他啥都不做)。  代码如下:-module(file_read). -export(). read(File)-> case file:open(File, ) of {ok, Fd} -> scan_file(Fd,file:read(Fd, 1024)); {error, Reason} -> {error, Reason} end . scan_file(Fd, {ok, Binary}) -> scan_file(Fd, file:read(Fd, 1024)); scan_file(Fd, eof) -> file:close(Fd); scan_file(Fd, {error, Reason}) -> file:close(Fd). 在打开文件的地方特地用了option是,这样可以保证在打开文件erlang不会起一个额外的进程,并且是以二进制流的方式去打开文件,应该是最快了。但是经过**:C代码timer:tc(file_read,read,). 结果确是:C代码 {26286000,ok}   整整花了26秒,就算在16核的机器上,把文件切成16份,用16各进程去读文件,读完文件也要花 26/16=1.6秒,这还只是光读文件所要花的时间,没有算上其他计算词频所用的时间。  貌似erlang在计算密集型的计算上确实比其他语言没有啥优势

时间: 2024-10-21 07:59:09

erlang读文件的速度为啥这么慢?的相关文章

改良XP预读文件 让关机速度快如闪电!

一.禁止程序产生索引文件 预读文件导致系统启动变慢,是因为要读取运行程序时生成的索引文件所造成的.因此,我们只需要禁止PF文件的产生即可. 在"运行"窗口中输入"msconfig"后回车打开系统配置实用程序窗口,将其切换到"服务"标签,然后将其中的"Task Scheduler"项前的勾取消并保存设置,这样即可起到禁止建立索引文件的目的(快知道:电脑关机很慢怎么办?). 关闭"Task Scheduler"

改良XP预读文件 为系统启动提速

随着Windows系统的身躯越来越庞大,到了Windows XP中,微软提供了一种预读取的功能.即在Windows文件夹中添加了一个Prefetch文件夹,以利用该功能提高系统性能,加快系统启动和文件的读取速度.但是随着使用时间的增多,用户每使用一个程序,系统就会在该文件夹中留下一个以PF为扩展名的索引文件.预读文件导致系统启动变慢,是因为要读取运行程序时生成的索引文件所造成的.因此,我们只需要禁止PF文件的产生即可. 一.关闭相关服务 在"运行"窗口中输入"msconfig

如何设置win7预读文件功能

  浅析windows7预读文件的功能和设置:在对win7版操作系统文件进行整理的过程中,系统文件以及程序都会是Ghost win7操作系统(雨林木风ghost win7系统下载)用户的主要针对对象.那么在win7版操作系统中存在的windows预读文件可以进行删除和优化吗?是不是对windows预读文件进行优化以后,win7版操作系统的开机速度就会有所提升了呢? Windows预读文件是win7版操作系统开启的时候,必须要启动的文件.对于win7版操作系统用户来说,如果在选择优化项目的时候,勾

怎样改良预读文件

  一.只读取系统文件 由于Prefetch中保存了系统和应用程序的索引信息,从提高启动速度的角度来看,笔者提醒大家可以只设置读取系统文件,而跳过应用程序的索引文件读取过程.对此,可以运行"regedit"后打开注册表编辑器,依次选择HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerMemory ManagementPrefetchParameters,双击右侧的"EnablePrefetcher&q

二维数组-C#中如何大幅提高写excel文件的速度?

问题描述 C#中如何大幅提高写excel文件的速度? 输入文件:input.txt包含以[:]号或者[t]制表符分隔的多行(实际在100万行以上)数据,每行数据个数不定. a;b;c 1;2; 1;2;3;4;5 输出文件;output.xlsx a b c 1 2 1 2 3 4 5 问题:写了个小程序处理2000行在10s以内,百万行速度就太慢,无法忍受了.求教一些能显著提高写Excel速度的方法.网上查的先变成二维数组之类的方法,效果不大.百万行在20min以内就好. 解决方案 你完全没有

从fread和mmap 谈读文件的性能

[原文] 1. https://www.byvoid.com/blog/fast-readfile/ 2. http://blog.csdn.net/jwh_bupt/article/details/7793549 3. http://blog.csdn.net/jwh_bupt/article/details/8373063 [原文1]         在进行大规模数据处理时,读文件很有可能成为速度瓶颈.不管你的CPU有4个核还是8个核,主频有2G还是3G,硬盘IO速度总是有个上限的.在本人最

一个进程写文件,一个进程读文件的问题

问题描述 有一个进程 A 每隔一段时间(时间很短)往文件 F 后面加写数据,另一个进程 B 从文件 F 读数据,如何使进程 B 读的速度小于进程 A ,又要使其效率尽量高? 问题补充:xiaoyuqi00 写道 解决方案 如何使进程 B 读的速度小于进程 A ,又要使其效率尽量高?换个角度你把文件中每个字节看成队列中的节点,A一直写,你可以想象成A是往队列里面加值.B一直读,你可以想象成B从队列中取值.这时候B只需要判断队列长度是否发生了变化,如果有变化那么B就应该取值了,通过判断文件长度来触发

XP预读文件为关机加速

随着Windows系统的身躯越来越庞大,到了Windows XP中,微软提供了一种预读取的功能.即http://www.aliyun.com/zixun/aggregation/32995.html">在Windows文件夹中添加了一个Prefetch文件夹,以利用该功能提高系统性能,加快系统启动和文件的读取速度.但是随着使用时间的增多,用户每使用一个程序,系统就会在该文件夹中留下一个以PF为扩展名的索引文件. 一.禁止程序产生索引文件 预读文件导致系统启动变慢,是因为要读取运行程序时生成

c-C++读文件没读完就结束,eof已用

问题描述 C++读文件没读完就结束,eof已用 这段代码是我写哈夫曼编码的一个解压函数,现在的问题是,没有把我整个文件解压完像图里面,只解压了一部分然后 ,还有剩下很多没读,貌似是eof为真,导致读文件结束了 这是怎么回事啊? void readCodeFile(){ ifstream inf; ofstream outf; int w[200] c = 0; char s[200]; string code; HuffTreeTreeArray[100]; HuffNode tempNode;