commit fd057f6a78083690082d7887e91f79d63222ced3 parent eba34d94a1f2f6c7622fed94f57938e65a8a8676 Author: ChanderG <[email protected]> Date: Sat, 29 Nov 2025 12:14:18 +0530 add multi-worker tasks processing use bt threads to spawn workers that process tasks in inf loops includes a closing footer msg sent to all workers via the task queue Diffstat:
| M | grep.asd | | | 3 | ++- |
| M | grep.lisp | | | 23 | +++++++++++++++++++---- |
2 files changed, 21 insertions(+), 5 deletions(-)
diff --git a/grep.asd b/grep.asd @@ -8,7 +8,8 @@ :filesystem-utils :pathname-utils :vom - :lparallel) + :lparallel + :bordeaux-threads) :build-operation "program-op" :build-pathname "cl-grep" :entry-point "cl-grep:main") diff --git a/grep.lisp b/grep.lisp @@ -1,9 +1,19 @@ (in-package :cl-grep) (defparameter *queue* nil) -(defun setup-task-queue () +(defun setup-tasks-mgmt () (setf *queue* (lq:make-queue))) +(defun grep-file (file) + (lo "Grepping file: ~a" file)) + +(defun process-task () + (loop + (let ((task (lq:pop-queue *queue*))) + (if (eq task :done) + (return)) + (grep-file task)))) + (defun queue-file (file) (lo "Visiting file: ~a" file) (let* ((name (pu:file-name file)) @@ -32,9 +42,14 @@ ;; Main entrypoint for the grep functionality (defun grep-launcher (str dir) - (setup-task-queue) - (fs-walker dir) - (lo "Num items in task queue: ~a" (lq:queue-count *queue*))) + (setup-tasks-mgmt) + (let* ((numw 4) + (workers (loop for i from 0 below numw + collect (bt:make-thread #'process-task)))) + (fs-walker dir) + (loop for i from 0 below numw + do (lq:push-queue :done *queue*)) + (loop for w in workers do (bt:join-thread w)))) (defun main () (log-setup)