Ich bin auf einen Artikel gestoßen, in dem Studenten Netzwerkverkehr verwendeten, um ihre Universität auf dem IPv6- Diagramm des Landes zu zeichnen . [Bild]
Ihr Ziel ist einfach zu sagen, aber schwer umzusetzen. Zeichnen Sie den Text MAIL (da dies eines der wenigen Wörter ist, die in einem 1D-Diagramm gelesen werden können) in das CPU-Diagramm.
Es sollte ungefähr so aussehen:
Ein bisschen mehr über die Qualifikationen herausarbeiten:
- Der Code muss nicht plattformübergreifend sein (sodass Sie keine unbekannten APIs benötigen, um damit umzugehen).
- Sie können es in jedem allgemeinen CPU-Nutzungsdienstprogramm erfassen, das Sie haben.
- Die Grafik sieht auf einer anderen Maschine etwas schlechter aus: Diesmal vertraue ich Ihnen.
- Die Basis-CPU-Auslastung% muss kontinuierlich sein. Wenn Sie also eine zufällige Welle erzeugen und etwas hervorheben, das wie das Wort MAIL aussieht, handelt es sich offensichtlich um Betrug.
- Sie können die maximal zu verwendende Last auswählen, diese muss jedoch ausreichend groß sein, um sie klar erkennen zu können.
- Sie müssen der Linearität des Beispiels folgen. (Für M sieht es so aus: Basis%, dann plötzlicher Anstieg auf das angegebene Maximum, allmählicher Abfall auf ein niedrigeres Prozent, Anstieg zurück auf das Maximum und plötzlicher Abfall auf das Basis-Prozent.)
- Wenn es nicht lesbar ist, werden die Wähler es doch bemerken.
Es gelten Standardlücken. Poste die Bilder auch!
Antworten:
Python, 143
Jedes Zeichen der Zeichenfolge entspricht einer Sekunde Aktivität, vom ASCII-Zeichen
0
(maximale Belastung) bis zur~
(sehr geringen Belastung). Das Programm wird in einer zeitsynchronisierten Schleife ausgeführt, sodass Sie mehrere Instanzen ausführen können, um bessere Ergebnisse zu erzielen.Ich habe Python 2.7.6 unter OS X mit einem Intel Core i7 verwendet, aber es sollte auf anderen Computern mit ein wenig Anpassung funktionieren
0.001
. Der Screenshot unten wurde mit erheblichen Hintergrundaktivitäten aufgenommen.Update - Ich konnte ein übersichtlicheres Diagramm mit
time()/10
einer geringeren Update-Häufigkeit erstellen :Und zum Schluss noch eine Golf-Version ( 123 Bytes ) und das Ergebnis :
quelle
Python,
358281268221194 BytesMonochrom ist ja letztes Jahr. Dies verwendet mehrere Prozesse und Systemaufrufe, um zweifarbige CPU-Grafiken zu erhalten!
Ausgabe von Activity Monitor (OS X 10.9):
Ausgabe von MenuMeters:
Alle Ausgaben wurden mit einer Aktualisierungsgeschwindigkeit von 1s generiert. Es wurden keine signifikanten Hintergrundaufgaben ausgeführt, obwohl diese Ausgabe jede Single-Threaded-CPU-Aufgabe ziemlich leicht übertrifft.
Dieser Code setzt voraus, dass Sie 8 Kerne haben. Es sollte ziemlich einfach sein, für weniger / mehr Änderungen vorzunehmen. Es ist portabel für Linux / UNIX-Systeme (obwohl es nur unter OS X getestet wurde) und sollte für jeden CPU-Monitor, der die CPU-Zeit des Benutzers von der des Systems unterscheiden kann, dieselbe zweifarbige Ausgabe erzeugen.
Dies funktioniert im Wesentlichen, indem sieben Prozesse abgebrochen werden, von denen jeder 1 Sekunde Schlaf, Drehen im Benutzermodus oder Drehen des Kernels verbringt. Das Starten im Kernel-Modus wird durch das Anfordern großer Datenmengen von erreicht
/dev/urandom
, was den Treiber-Backup/dev/urandom
dazu zwingt , viele "System" -CPU-Zyklen zu verbringen.EDITED [07/21]: Deutlich verkürzt durch Verwendung von
fork()
anstelle vonmultiprocessing.Process
(/dev/urandom
funktioniert ohnehin nur auf * NIX-Systemen, sodass die Portabilität nicht beeinträchtigt wird). Beachten Sie jedoch, dass das Programm jetzt Hintergrundaufgaben erzeugt . Möglicherweise müssen Siekillall Python
(oder ähnliches), um die CPU-Esser loszuwerden.Ich konnte nicht widerstehen, noch ein paar Briefe umzusetzen. Ich habe 16 Buchstaben und ein paar Symbole:
Das vollständige Alphabet lautet "ACDFHILMNOPTUVWY" mit den Symbolen "._ ~ / \". Es gibt wahrscheinlich viel mehr Zeichen, die dargestellt werden können.
Völlig unbenutzter Code für die zusätzlichen Buchstaben:
quelle
C (Intel Core Duo + OS X / Darwin), 248 Byte
Dieser Code ist ungefähr so portabel wie die Cheops-Pyramide. Das tut mir leid. Die von zurückgegebenen Werte
mach_absolute_time()
sind hardwareabhängig, aber auf meinem Computer erhöht sich der Wert ungefähr einmal pro Nanosekunde.Hier ist das Ergebnis:
Es gibt zwei Diagramme, da der Prozessor zwei Kerne hat. Ich habe die maximale CPU-Auslastung auf ca. 90% festgelegt, da der Prozess bei jedem Aufruf zwischen den Kernen wechseln kann
usleep()
. Bei einer Auslastung von 100% ist der Prozess an einen Kern gebunden und die Ergebnisse sind unleserlich ( siehe dies zum Beispiel ).quelle
uint64_t
Variablen nicht in den Header der folgendenfor
Schleife schreiben?Ruby, 150 Zeichen
Das ist noch nicht so kurz, aber meiner Meinung nach ist die Ausgabe ziemlich gut, also dachte ich mir, ich würde das trotzdem posten. Wie bei den meisten anderen Lösungen müssen Sie den Ruby-Prozess möglicherweise an einen bestimmten Kern binden, indem Sie ihm das Präfix voranstellen
taskset -c $core
.Der Code ist eine einfache Kombination aus Drehen / Schlafen für eine bestimmte Zeit, die es etwas tragbar machen sollte . Durch Variation des Verhältnisses von Spin / Sleep-Zeit werden gleichmäßige Verläufe erzeugt.
Durch Verringern der CPU-Abtastfrequenz sehen die Kanten etwas besser aus:
Durch Hinzufügen einiger weiterer Buchstaben zum Alphabet (
AILMNUVW
sind etwas erkennbar) können wir auch einige andere Wörter schreiben:Diese Bilder wurden mit folgendem Code erzeugt:
Wörter, die mit den implementierten Buchstaben geschrieben werden können, finden Sie mit
quelle
Python auf Intel Pentium 4 3.0 GHz,
180 166 145 141138 BytesMit anrufen
taskset -c 0 python cpu_graph_drawer.py
.taskset
wird benötigt, um den Prozess auf die Verwendung nur einer CPU / eines Kerns zu beschränken (Hyperthreading in meinem Fall).Ergebnis ist nicht so toll.
quelle
gnome-system-monitor
weiß nur, was ich weiß. Haben Sie Alternativen, die mit LMDE Cinnamon laufen würden?a=[...]+[(.1,.2)]*10
anstelle von verwenden.extend
.Java 8, 482 Zeichen
Jedes Zeichen in der Zeichenfolge steht für die Anzahl der Threads, die verwendet werden. Bild auf Intel Core i3 (2 Kerne / 4 Threads) aufgenommen.
Bearbeiten : mehr Golf-Version (322 Zeichen), gleiche Funktionalität:
quelle
C 78 Bytes
Du hast nie gesagt, dass wir keine Benutzereingaben akzeptieren könnten, soooo.
Dieses Programm liest vom Standard ein und führt jedes Mal, wenn es ein Zeichen liest, eine unbegründete CPU-Verschwendung für die Schleife aus und ruft dann erneut main auf. Sie steuern die verwendete CPU-Zeit, indem Sie die Eingabetaste mit unterschiedlichen Geschwindigkeiten spammen.
Ich habe dies auf einem Intel i3 4130T ausgeführt, bei dem es sich um einen relativ neuen Prozessor handelt. Ihre Laufleistung kann jedoch variieren. Wenn Sie mehr oder weniger CPU-Zeit verbrauchen, als für Sie praktisch ist, versuchen Sie, mit dem Verschiebungsbetrag in der Verzögerungsschleife zu spielen.
Mein Programm ist fantastisch, weil es:
Nach ein paar Versuchen habe ich ein Diagramm erstellt, das so aussah:
quelle
taskset -c 1 [file]
yes | [program]