在Go中,为什么" File.Readdirnames"做一个" clock_gettime"系统调用?

时间:2014-07-31 16:01:45

标签: linux file go operating-system

作为this question的后续,我正在尝试编写一个Go程序,该程序仅在没有不必要的系统调用的情况下以有效的方式列出文件名。这就是我到目前为止所做的:

package main

import (
        "os"
        "fmt"
        "log"
)

func main() {

        // Open directory and check for errors
        f, err := os.Open(".")
        if err != nil {
                log.Fatal(err)
        }

        // Get file names
        files, err := f.Readdirnames(0)
        if err != nil {
                log.Fatal(err)
        }

        // Print files
        fmt.Print(files, "\n")
}

但是,当我运行strace时,我会看到以下许多内容:

clock_gettime(CLOCK_REALTIME, {1406822401, 824793686}) = 0

这涉及到什么?如何使此代码更有效?

2 个答案:

答案 0 :(得分:0)

我是spitballing,但我认为它与Go的内置调度程序和垃圾收集有关。

简短的回答是,go将永远不会像C一样快,因为它提供了C不具备的所有额外运行时功能。

您列出的代码可能是您在Go中执行所需操作的最快方式。

答案 1 :(得分:-1)

clock_gettime只是一个系统调用,在go的运行时调用。运行时执行很多操作,调度等等,所以对于这么多的clock_gettime来说它是正常的。

我认为你不能让这个程序更有效率,因为它只是为了这么小的功能。你不应该介意它。