golang
hat nur eine Methode runtime.GOMAXPROCS(1)
, um die Anwendung einen goroutine
zur gleichen Zeit zu setzen, aber ich möchte die Anwendung nur auf der spezifischen CPU laufen lassen?Laufen auf der spezifischen CPU, nicht eine Goroutine?
Antwort
So starten Sie binäre gehen, sagen example.exe
so, dass es nur auf CPU 0 auf Windows läuft, Sie start
Befehl mit „Affinität“ Parameter verwenden:
start /affinity 1 example.exe
Ich weiß nicht, was genau Sie sind versuchen zu erreichen, aber beziehen Sie sich auf this document describing GOMAXPROCS - es könnte der Fall sein, dass Go Runtime das Gleiche effizienter tun wird.
Unter dem gc Compiler (6g oder 8g) Sie GOMAXPROCS auf mehr als der Standardwert 1 gesetzt sein, um die Laufzeitunterstützung, damit mehr als einen OS-Thread zu verwenden, das ist alles goroutines teilen den gleichen Thread, wenn GOMAXPROCS auf einen Wert größer als 1 festgelegt ist. Wenn GOMAXPROCS größer als 1 ist, werden sie in einem Thread-Pool mit so vielen Threads ausgeführt. Mit dem gccgo Compiler GOMAXPROCS ist effektiv gleich der Anzahl der laufenden goroutines. Angenommen, n
ist die Anzahl der Prozessoren oder Kerne auf der Maschine. Wenn Sie die Umgebungsvariable GOMAXPROCS >= n
setzen oder runtime.GOMAXPROCS(n)
aufrufen, werden die Goroutinen unter den n Prozessoren aufgeteilt (verteilt).
Mehr Prozessoren bedeuten jedoch nicht unbedingt eine lineare Verbesserung der Leistung, vor allem weil mehr Kommunikation benötigt wird: der Overhead für die Nachrichtenübermittlung steigt. Ein Erfahrungs Faustregel scheint für n Kern Einstellung GOMAXPROCS bis n-1 ergibt die beste Leistung und die folgenden sollte auch beachtet werden zu sein, dass:
number of goroutines > 1 + GOMAXPROCS > 1
Also, wenn es nur eine goroutine ausführt Zu einem bestimmten Zeitpunkt setzen Sie GOMAXPROCS nicht!
Wenn Sie eine Goroutine für einen bestimmten Betriebssystem-Thread sperren möchten, können Sie dies mit runtime.LockOSThread tun.
LockOSThread verbindet die aufrufende Goroutine mit ihrem aktuellen System-Thread. Bis die aufrufende gorutine beendet wird oder UnlockOSThread aufruft, wird sie immer in diesem Thread ausgeführt, und keine andere goroutine kann.
Mehr über auf https://golang.org/pkg/runtime/.
Ich glaube nicht, dass es die Frage von OP überhaupt beantwortet. Außerdem, OS-Thread! = CPU-Kern, was ich glaube, was OP gefragt hat. – syntagma
- 1. Webhook Prozess auf einem anderen goroutine laufen
- 2. Wert von goroutine erhalten und eine andere goroutine annullieren
- 3. Node.js child_process.fork(), um auf verschiedenen CPU-Kernen zu laufen
- 4. Goroutine Beispiel explaination benötigt
- 5. Hat ein Single-Threaded-Anwendung laufen auf nur einer CPU
- 6. Ist es möglich, eine Goroutine zu verschieben?
- 7. goroutine Kanäle - der Wert der Sende Anweisung
- 8. Aufruf einer spezifischen Merkmalsimplementierung für eine nicht generische Struktur
- 9. Goroutine-Blöcke beim Zugriff auf die Karte
- 10. goroutine oder Multithreading funktioniert nicht in Golang
- 11. Daemon führt nur einmal eine Goroutine aus
- 12. GoLang: Dekomprimieren bz2 in Goroutine, konsumieren in anderen Goroutine
- 13. Begrenzen der CPU-Nutzung auf mehreren PHP-Skripten, die asynchron laufen
- 14. Warum wies der CPU-Leistungszähler weiterhin 0% CPU-Auslastung auf?
- 15. Goroutine: Zeit.Schlafen oder Zeit.Nach
- 16. Warum wird meine Goroutine nicht ausgeführt?
- 17. Warum blockiert diese Goroutine?
- 18. Wie Stop Goroutine
- 19. minimale Arbeitsgröße einer Goroutine
- 20. Es scheint nur eine Web-App-Instanz zu laufen.
- 21. Wird eine Mehrfach-Goroutine gleichzeitig eine Methode auf einem Conn aufrufen?
- 22. Test Golang Goroutine
- 23. Goroutine ein Prozess Fehler in Golang
- 24. Emulator auf MacOS laufen
- 25. Theano fällt zurück auf CPU
- 26. Wenn eine Goroutine bei E/A blockiert, wie erkennt der Scheduler, dass er nicht mehr blockiert?
- 27. Kann nicht eine Wordpress-Site auf einem lokalen Rechner laufen
- 28. Java verwendet 100% der CPU auf Linux
- 29. Wie man Tensorflow auf der CPU
- 30. Fehler beim tf.SVD auf GPU laufen - tensorflow
Start/Affinität 1 gobinary.exe –
Das Festlegen der Prozessoraffinität ist OS-spezifisch und wird am besten außerhalb des Prozesses selbst ausgeführt. Ein Befehlszeilenprogramm wie 'taskset' unter Linux ist normalerweise das, was Sie dafür verwenden. – JimB