cl-grep

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

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:
Mgrep.asd | 3++-
Mgrep.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)