有時候會遇到這樣的需求,比如log日誌檔案,這個檔案很大,甚至上百M,需要把所有的日誌拿來做統計,這時候我們如果用單程式來處理,效率會很慢。
如果我們想要快速完成這項需求,我們可以利用Linux的一個利器split,先根據這個檔案的總大小、總行數,來按照一個比例來分割,在根據分割的檔案數量,fork出一定比例合適的子程式數量分批處理,那麼效率可想而知。
linux的split可以看這篇文章來學習測試下Centos檔案切割利器_split命令及cat命令合併檔案
//shell # split -l 1000 -d test.txt new_test.txt --verbose //比如這裡切割了10份
<?php //php程式碼 //根據切割數量,fork相匹配的子程式數量 $count = 10; for ($i = 0; $i < $count; ++$i ) { $pid = pcntl_fork(); //建立子程式 //父程式和子程式都會執行下面程式碼 if ($pid == -1) { //錯誤處理:建立子程式失敗時返回-1. die('could not fork'); } else if ($pid) { //父程式會得到子程式號,所以這裡是父程式執行的邏輯 //如果不需要阻塞程式,而又想得到子程式的退出狀態,則可以註釋掉pcntl_wait($status)語句,或寫成: pcntl_wait($status,WNOHANG); //等待子程式中斷,防止子程式成為殭屍程式。 } else { // 業務處理 begin func("new_text.txt0".$i); // 業務處理 end exit(0) ; } }