我面临一个问题,即使在论坛上花了一天时间,我仍然无法完全理解和解决。
所以在这里,我做了一个循环所有文件夹及其子文件夹的函数,它有 2 个子函数:- 对于找到的每个文件,列出文件的名称。- 对于找到的每个文件夹,重新启动相同的父函数以再次查找子文件和文件夹。
为简化起见,该宏以递归方式列出了树中的所有文件。但我的目标是尽可能快地完成,所以每次遇到新文件夹时我都会运行一个新的 goroutine。
问题:
我的问题是,当树结构太大(文件夹和子文件夹中的文件夹太多......)时,脚本会生成太多线程,因此会出现错误。所以我增加了这个限制,但突然间它不再需要电脑了:/
所以我的问题是,如何制作适合我的代码的工作系统(带池大小)?不管我怎么看,我都没有看到如何说,例如,生成新的 goroutines 达到一定的限制,清空缓冲区的时间。
源代码:
https ://github.com/LaM0uette/FilesDIR/tree/V0.5
主要的:
package main
import (
"FilesDIR/globals"
"FilesDIR/task"
"fmt"
"log"
"runtime/debug"
"sync"
"time"
)
func main() {
timeStart := time.Now()
debug.SetMaxThreads(5 * 1000)
var wg sync.WaitGroup
// task.DrawStart()
/*
err := task.LoopDir(globals.SrcPath)
if err != nil {
log.Print(err.Error())
}
*/
err := task.LoopDirsFiles(globals.SrcPath, &wg) // globals.SrcPath = My path with ~2000000 files ( this is a serveur of my entreprise)
if err != nil {
log.Print(err.Error())
}
wg.Wait()
fmt.Println("FINI: Nb Fichiers: ", task.Id)
timeEnd := time.Since(timeStart)
fmt.Println(timeEnd)
}
撒科打诨
相关分类