我是一个GO新手,以前是用C/C++的(非科班)。前段时间,听说GO语言写代码效率与Python一样快,而且执行效率与C差不多,而且goroutine 比thread 更加轻量,更加灵活,并发性能更好,就花了一个星期,粗略地看了一遍 The GO Programming Language 这本书,然后就用GO重写以前的C/C++代码作为练手,就发现bufio的scan按行读取很慢,不知道是什么原因,还有就是我打算先将文件读到内存中,然后用goroutines做一些并行(解开for循环),发现文件都没有读完,goroutines就产生了。代码如下(不会用markdown,所以就截图了,红色方框处就是读取文件的代码):
![无标题.jpg](https://static.studygolang.com/190114/44415e72e1320dabb8cfd4eced513100.jpg)
大文件全部读取到内存,一般是不合理的操作。
看逻辑,基本上读取文件,找到某种匹配,就记录到某处。并没有需要针对已经找到的数据做互相关联计算。
所以,建议的做法,不需要把所有找到的结果都缓存在某个数组,而是,分段式操作,完成一个段落,直接输入(放文件,打屏都可以)。
如果后续还是发现慢,可以用一个goroutine读文件块,分成多个互相不干扰的块,丢给一个worker池去处理,会更加快。
#9
更多评论