多线程读一个大文件的效率问题
问题描述:
一个文件,每一行是一条固定格式的记录,大概有60多万行,50-60M左右,用多线程将所
有记录读出进行分析。但是发现50个线程和1个线程的效率差不多,速度提高在2-8秒波
动,甚至有时还不如1个线程的效率。
程序大致流程如下,请教各位,哪里是速度瓶颈??要如何改进??
//共享锁说明 保证每一个共享资源都有一个锁来保证共享;
rdfile_lock 读文件锁;
log_lock 日志文件锁;
errfile_lock 错误记录文件锁;
buf_lock 数据缓冲区锁;
...
lock(rdfile_lock)
根据每个线程在文件中的不同的起始地点定位文件指针fp;
fgets(record, record_len, fp);
if (feof(fp)) {
unlock(fdfile_lock);
thread_exit(...);
}
unlock(fdfile_lock);
...
分析record;
if (record错误) {
lock(errfile_lock);
write_error_record();
unlock(errfile_lock);
lock(log_lock);
写日志文件;
unlock(log_lock);
}
...(处理记录)
lock(buf_lock)
将处理后的记录放入缓冲区
unlock(buf_lock);
...
是不是因为加锁,解锁太多导致效率降低?