С появлением доступных многопроцессорных систем возник у пользователей: как использовать мощность компьютерной техники. При использовании обыкновенного программного обеспечения количество процессоров системы в основном простаивает.
Практическим примером может служить, например преобразование музыкальных файлов 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)))
(nil cond
((s = "."))
((s = ".."))
((fullname regp) ; is a file
(nil let ((ss (s size)))
(nil if (ss > 5)
(nil if (((s part (ss - 5)) lower) = ".flac")
(nil let ((arg
(nil if (q > 5)
(nil list "--advanced-encode-option" "lowpass_frequency=22" fullname)
(nil list fullname))))
(freemans enter)
(nil fork
(nil if (0 = (nil eval `("oggenc" system
,("--quality=" + (q string))
,@arg)))
(fullname unlink))
(freemans exit)))))))
((fullname dirp) ; is dir
(fullname flactoogg q freemans)))))
(d close)))
("." flactoogg ((arg first) read) ('freemans newobject))
Результатом использования параллельно запущенных процессов станет полноценная загрузка процессоров полезной работой. И огромная экономия личного времени.