Я буду честен, идея вашего подхода на самом деле выглядит довольно вменяемой для меня. Начнем с того, что я, вероятно, использовал бы concat
intsead из foldl1 (++)
и отбросил бы несколько паренов, чтобы заставить нас:
f x y = concat <[110]gt; sequence [getEnv x, return "-", getEnv y]
Это действительно не кажется мне таким уж плохим. Но если бы я действительно хотел продвинуться дальше, вот некоторые мысли, которые у меня были бы. Во-первых, я бы вспомнил функцию intercalate
.
f x y = intercalate "-" <[111]gt; sequence [getEnv x, getEnv y]
Есть удобное сокращение для применения функции к каждому элементу списка; mapM f = sequence . map f
. Итак:
f x y = intercalate "-" <[112]gt; mapM getEnv [x,y]
Я бы остановился на этом; это выглядит довольно чистым и ремонтопригодным для меня.
sar -q
сообщат длина очереди, длина списка задач и три средних числа загрузки.
Пример:
matli@tornado:~$ sar -q 1 0
Linux 2.6.27-9-generic (tornado) 01/13/2009 _i686_
11:38:32 PM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15
11:38:33 PM 0 305 1.26 0.95 0.54
11:38:34 PM 4 305 1.26 0.95 0.54
11:38:35 PM 1 306 1.26 0.95 0.54
11:38:36 PM 1 306 1.26 0.95 0.54
^C
vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
2 0 256368 53764 75980 220564 2 28 60 54 774 1343 15 4 78 2
Первый столбец (r) является очередью выполнения - 2 на моей машине прямо сейчас
Править: Удивленный нет способа просто получить число
Быстрый 'n' грязный способ получить число (мог бы варьироваться немного на различных машинах):
vmstat|tail -1|cut -d" " -f2
uptime
даст Вам недавнее среднее число загрузки, которое является приблизительно средним количеством активных процессов. uptime
сообщает среднее число загрузки по последнему 1, 5, и 15 минут. Это - измерение на систему, не на ЦП.
Не уверенный, какова длина очереди процессора в Windows, надо надеяться, это достаточно близко к этому?