С появлением доступных многопроцессорных систем возник у пользователей: как использовать мощность компьютерной техники. При использовании обыкновенного программного обеспечения количество процессоров системы в основном простаивает.
Практическим примером может служить, например преобразование музыкальных файлов flac → ogg. Можно, например использовать консольный запрос:
for i in *.flac ; do oggenc --quality=10 "$i" ; done
Но при большом количестве файлов простаивающие процессоры слегка вызывают раздражение. Для того, чтобы оценить мощность производительной техники нужно параллельное программное обеспечение.
Предлагается использовать хорошую программу на языке Lisp2D, которая запускает параллельно конвертацию файлов, заключённых в директориях. Количество одновременно запущенных задач будет всегда равно количеству процессоров.
(('freemans defclass) defvar n signal lock nwaitsignal) ('freemans defmethod freemans () (nil setq n (nil nprocs) signal ('signal newobject) lock ('lock newobject) nwaitsignal (0 copy))) ('freemans defmethod enter () (lock progn (nil when (n = 0) (nwaitsignal += 1) (signal wait lock)) (n -= 1))) ('freemans defmethod exit () (lock progn (n += 1) (nil when (nwaitsignal > 0) (nwaitsignal -= 1) (signal send)))) ('string defmethod flactoogg (q freemans) (nil let (s (d ('dir newobject this))) (nil while ('s set (d read)) (nil let ((fullname (this + "/" s)) stat type) ('stat set (fullname stat)) (nil if (nil statp stat) ('type set (stat file-type))) (nil cond ((s = ".")) ((s = "..")) ((type = 'regular) (nil let ((ss (s size))) (nil if (ss > 5) (nil when (((s part (ss - 5)) lower) = ".flac") (freemans enter) (nil fork (nil if (0 = ("oggenc" system ("--quality=" + q) fullname)) (fullname unlink) (cerr writeln "crash oggenc for " fullname)) (freemans exit)))))) ((type = 'directory) (fullname flactoogg q freemans))))) (d close))) ("." flactoogg (arg first) ('freemans newobject))
Результатом использования параллельно запущенных процессов станет полноценная загрузка процессоров полезной работой. И огромная экономия личного времени.