Kann eine solche Anwendung in C/Rust/Zig/& C erstellen), aber ich erforsche nur die Fähigkeiten der GO -Sprache und seiner modernen Compiler. () , aber es scheint sich nicht auf die Gesamtzahl der Threads auszuwirken, wobei die Werte niedriger als die aktuelle CPU -Anzahl (oder ich mache es einfach falsch).
Grundsätzlich Ich wollte mit der Erstellung einer Konsolenanwendung im alten Stil für Linux ohne Parallelität und Goroutinen spielen, nur eine unendliche für Schleife, die regelmäßig einige Dinge erledigt (vielleicht einige Dateien in der I/O-Blocking-Art und anzeigen und einige Informationen anzeigen von ihnen), wo ich gelegentlich den Garbage Collector manuell anrufe, wenn ich muss. >, debug.setMemorylimit und runtime.gc () . Aber wie kann ich Single-Threadness schaffen? Oder ist es intrinsisch unmöglich? >
Code: Select all
package main
import (
"runtime"
"runtime/debug"
"strings"
"time"
)
func init() {
// Locking OS thread
runtime.LockOSThread()
// GOMAXPROCS=1, Any effect?
runtime.GOMAXPROCS(1)
// Turn off garbage collection
debug.SetGCPercent(-1)
//debug.SetMemoryLimit(math.MaxInt64)
}
func main() {
var index uint64
for {
index++
// Emulate some memory allocation
strings.Repeat("x", 10*1024)
// Get memory statistics
var memStats runtime.MemStats
runtime.ReadMemStats(&memStats)
// Output some info
println(index, memStats.Alloc/1024.0, memStats.Sys/1024.0, memStats.NumGC)
if index%20 == 0 {
// Run GC periodically
runtime.GC()
}
time.Sleep(time.Duration(500) * time.Millisecond)
}
}
< /code>
Build für Linux: < /p>
GOARCH=amd64 GOOS=linux go build -ldflags "-s -w" -trimpath .