我面临一个问题,即使在论坛上花了一天时间,我仍然无法完全理解和解决。


所以在这里,我做了一个循环所有文件夹及其子文件夹的函数,它有 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)

}