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/1]).


read(File)->
case file:open(File, [ raw, binary]) 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是[ raw, binary],这样可以保证在打开文件erlang不会起一个额外的进程,并且是以二进制流的方式去打开文件,应该是最快了。

  但是经过测试:

timer:tc(file_read,read,["d:\\download\\doc\\doc.txt"]).

 结果确是:

{26286000,ok}

 整整花了26秒,就算在16核的机器上,把文件切成16份,用16各进程去读文件,读完文件也要花 26/16=1.6秒,这还只是光读文件所要花的时间,没有算上其他计算词频所用的时间。

   

  貌似erlang在计算密集型的计算上确实比其他语言没有啥优势

你可能感兴趣的:(erlang,Go)