Я наткнулся на статью, где студенты использовали сетевой трафик, чтобы нарисовать свой университет на графике IPv6 страны . [образ]
Ваша цель проста, но ее трудно реализовать. Нарисуйте текст MAIL (так как это одно из немногих слов, которые можно прочитать на одномерном графике) на графике ЦП.
Это должно выглядеть примерно так:
Разрабатывая немного больше о том, что соответствует:
- Код не обязательно должен быть кроссплатформенным (поэтому вам не понадобятся неизвестные API для работы).
- Вы можете записать его в любую общую утилиту использования процессора, которая у вас есть.
- График выглядит немного хуже на другом компьютере: я доверяю вам на этот раз.
- Базовое использование ЦП% должно быть непрерывным, поэтому, если вы генерируете случайную волну и выделяете что-то, похожее на слово MAIL, это, очевидно, обман.
- Вы можете выбрать максимальную нагрузку для использования, но она должна быть достаточно значительной, чтобы четко ее увидеть.
- Вы должны следовать линейности примера. (Для M это выглядит так: базовый%, затем внезапное увеличение до указанного максимума, постепенное падение до более низкого%, возврат к максимальному значению и внезапное падение до базового%.)
- Если это нечитаемо, избиратели все же заметят.
Применяются стандартные лазейки. Опубликовать изображения тоже!
Ответы:
Питон, 143
Каждый символ строки соответствует одной секунде активности, от символа ASCII
0
(максимальная загрузка) до~
(очень легкая загрузка). Программа запускается по циклу с синхронизацией времени, поэтому вы можете запустить несколько экземпляров для получения лучших результатов.Я использовал Python 2.7.6 на OS X с Intel Core i7, но он должен работать на других компьютерах с небольшой настройкой (настройте
0.001
). Скриншот ниже был сделан со значительной фоновой активностью.Обновление - мне удалось создать более четкий график с
time()/10
более низкой частотой обновления:И, наконец, вот еще версия для гольфа ( 123 байта ) и ее результат :
источник
Python,
358281268221194 байтаМонохромный так в прошлом году. Это использует несколько процессов и системных вызовов для получения двухцветных графиков ЦП!
Вывод из Activity Monitor (OS X 10.9):
Выход из MenuMeters:
Все выходные данные были созданы со скоростью обновления 1 с. Никаких значительных фоновых задач не выполнялось, хотя этот вывод довольно легко превосходит любую однопоточную задачу ЦП.
Этот код предполагает, что у вас есть 8 ядер. Это должно быть довольно легко изменить на меньшее / большее. Он переносим на системы Linux / UNIX (хотя он был протестирован только на OS X) и должен обеспечивать одинаковый двухцветный вывод для любого монитора ЦП, который может отличать время ЦП от пользователя.
По сути, это работает путем разветвления семи процессов, каждый из которых выберет потратить 1 секунду на сон, вращение в пользовательском режиме или вращение ядра. Вращение в режиме ядра достигается путем запроса больших объемов данных
/dev/urandom
, что заставляет драйвер при затратах/dev/urandom
тратить много «системных» циклов ЦП.РЕДАКТИРОВАНИЕ [07/21]: Значительно сокращено при использовании
fork()
вместоmultiprocessing.Process
(в/dev/urandom
любом случае работает только на системах * NIX, поэтому это не уменьшает мобильность). Обратите внимание, что теперь программа порождает фоновые задачи; Возможно, вам придетсяkillall Python
(или подобное), чтобы избавиться от пожирателей процессора.Я не мог удержаться от реализации еще нескольких писем. Я получил 16 букв плюс несколько символов:
Полный алфавит "ACDFHILMNOPTUVWY", с символами "._ ~ / \". Вероятно, есть гораздо больше символов, которые могут быть представлены.
Целиком код для дополнительных букв:
источник
C (Intel Core Duo + OS X / Darwin), 248 байт
Этот код примерно так же переносим, как Великая пирамида Хеопса. Прости за это. Возвращаемые значения
mach_absolute_time()
зависят от аппаратного обеспечения, но на моем компьютере значение увеличивается примерно раз в наносекунду.Вот результат:
Есть два графика, потому что процессор имеет два ядра. Я установил максимальную загрузку процессора примерно на 90%, потому что процесс может переключаться между ядрами при каждом вызове
usleep()
. При 100% загрузке процесс связан с одним ядром, а результаты неразборчивы ( см., Например, это )источник
uint64_t
переменных в заголовок следующегоfor
цикла?Рубин, 150 знаков
Пока это не так уж и мало, но, на мой взгляд, результаты довольно хорошие, поэтому я решил, что все равно опубликую это. Как и в большинстве других решений, вам может потребоваться закрепить процесс Ruby на определенном ядре, добавив к нему префикс
taskset -c $core
.Код представляет собой простую комбинацию вращения / сна в течение определенного времени, что должно сделать его несколько переносимым. Плавные градиенты создаются путем изменения соотношения времени вращения / сна.
Снижение частоты дискретизации ЦП делает края немного лучше:
Добавив еще несколько букв в алфавит (
AILMNUVW
несколько узнаваемых), мы также можем написать несколько других слов:Эти изображения были сгенерированы с помощью следующего кода:
Слова, которые можно написать с помощью введенных букв, можно найти с помощью
источник
Python, на Intel Pentium 4 3,0 ГГц,
180 166 145 141138 байтПозвони с
taskset -c 0 python cpu_graph_drawer.py
.taskset
необходимо ограничить процесс использованием только одного процессора / ядра (в моем случае гиперпоточность).Результат не так уж велик.
источник
gnome-system-monitor
это единственное, что я знаю. Есть какие-нибудь альтернативы, которые будут работать на LMDE Cinnamon?a=[...]+[(.1,.2)]*10
вместо.extend
.Java 8, 482 символа
Каждый символ в строке означает количество потоков, которые будут использованы. Снимок сделан на Intel Core i3 (2 ядра / 4 потока).
Изменить : более гольф версия (322 символа), та же функциональность:
источник
C 78 байтов
Вы никогда не говорили, что мы не можем принять пользовательский ввод, ооочень ..
Эта программа читает из стандарта in и каждый раз, когда она читает символ, она выполняет бесполезную трату ЦП на цикл, а затем снова вызывает main. Вы управляете количеством процессорного времени, которое он использует, спамом вводя клавишу на разных скоростях.
Я запускал его на Intel i3 4130T, который является довольно новым процессором. Но ваш пробег может варьироваться, если он использует больше или меньше процессорного времени, чем вам удобно наблюдать, попробуйте поиграть с величиной сдвига в цикле задержки.
Моя программа потрясающая, потому что она:
После нескольких попыток я создал график, который выглядел так:
источник
taskset -c 1 [file]
yes | [program]