在測試機器上,如果用cat方式,大概3-4g/min,面對合併後1.4t的檔案,需要至少6個小時,後來採用mmap+多執行緒寫同乙個檔案(20個執行緒)的方式進行,速度大約14g/min,100min完成處理,要明顯快很多,這是單機情形下較快的讀寫方式,經過測試綜合來看,fread和fwrite不如這個模式的速度,比cat也快(cat底層應該是用fread/fwrite或者read/write)。**如下:
用法:乙個待合併檔案列表和乙個輸出檔案,執行緒數預設20,需要修改的話直接改**
#include #include #include #include #include #include #include #include //open
#include //mmap
#include //fstat
#include #include #include #include #include using namespace::std;
static string outfile;
mapacc;
mapsamplesize;
int th=20;
int bufsize=200*1024*1024;
long headersize=25511;
void line_split(string line_info,char sep,vector&elements)else
}elements.emplace_back(element);
}void* process(string path)
int outvcf=open(outfile.c_str(),o_wronly);
long long startpos=acc[path];
lseek(outvcf,startpos,seek_set);
cout<0)else
ptr=(char*)mmap(null,copysz,prot_read,map_shared,fd,cursz);
cursz+=copysz;
if(ptr!=map_failed)
munmap(ptr,copysz);
}close(outvcf);
close(fd);
}int main(int argc,char* ar**) else
}list.close();
list.open(ar**[1]);
while(1)
iter = 0;
}}else
}if(iter<=20)
}list.close();
return 0;
}
快速合併檔案(1)
在平常整理檔案的時候,我們可能會遇到 要把多個檔案的內容合併到同乙個檔案中 如果只有幾個檔案,我們可以手動開啟複製貼上。但是如果有許多個檔案的話,這種手動方式十分低效。下面就介紹如何快速的合併檔案。此方法可以合併xls csv txt等格式的檔案。具體操作如下 1.新建乙個txt檔案,如 合併.tx...
普通快速冪
這個其實是屬於數學問題,我們在用計算機計算an 的時候一般是將n個a直接相乘,複雜度是o n 但是一旦遇到n較大的時候很容易tle。故產生了快速冪演算法,其時間複雜度為log2 n 原理是基於以下這兩個公式 1 x是奇數 xn x2 mod n 2 mod 2 x是偶數 xn x2 mod n 2 ...
Python 快速合併多個Excel檔案
注意 需要安裝pandas,openpyxl這兩個第三方類庫,否則會報錯。實現 coding gbk import os import pandas as pd dir input 請輸入待合併檔案的路徑 n 設定工作路徑 frames 存放匯入的檔案 for root,dirs,files in ...