kiuma / thread-pool Goto Github PK
View Code? Open in Web Editor NEWA simple Common Lisp thread pool
License: Other
A simple Common Lisp thread pool
License: Other
PROBLEM========================================================================= Thread creation is an 'heavy' process. Too many thrads hurts performance. SOLUTION======================================================================== thread-pool is a simple library that allows users for asynchronous computation using only a fixed number of threads optimizing overall performance. SAMPLE USAGE=================================================================== CL-USER> (require :thread-pool) CL-USER> (let ((out *standard-output*)) (defun make-lazy-fib (n) (labels ((fib (n) (if (> n 2) (+ (fib (- n 1)) (fib (- n 2))) 1))) (lambda () (format out "~%fib ~a = ~a~%" n (fib n)))))) CL-USER> (defvar *pool* (thread-pool:make-thread-pool 3)) *POOL* CL-USER> (thread-pool:start-pool *pool*) (#<SB-THREAD:THREAD "Anonymous thread" RUNNING {1002B88871}> #<SB-THREAD:THREAD "Anonymous thread" RUNNING {1002B88A71}> #<SB-THREAD:THREAD "Anonymous thread" RUNNING {1002B88C71}>) CL-USER> (let ((out *standard-output*)) (defun make-lazy-fib (n) (flet ((fib (n) (if (> n 2) (+ (fib (- n 1)) (fib (- n 2))) 1))) (lambda () (format out "~%fib ~a = ~a~%" n (fib n)))))) MAKE-LAZY-FIB CL-USER> (progn (thread-pool:add-to-pool *pool* (make-lazy-fib 15)) (thread-pool:add-to-pool *pool* (make-lazy-fib 20)) (thread-pool:add-to-pool *pool* (make-lazy-fib 5)) (thread-pool:add-to-pool *pool* (make-lazy-fib 17)) (thread-pool:add-to-pool *pool* (make-lazy-fib 10)) (thread-pool:add-to-pool *pool* (make-lazy-fib 6))) (#<CLOSURE (LAMBDA #) {10058664E9}>) (#<CLOSURE (LAMBDA #) {10058664E9}> #<CLOSURE (LAMBDA #) {1005867419}>) (#<CLOSURE (LAMBDA #) {10058664E9}> #<CLOSURE (LAMBDA #) {1005867419}> #<CLOSURE (LAMBDA #) {10058709C9}>) fib 15 = 610 (#<CLOSURE (LAMBDA #) {1005867419}> #<CLOSURE (LAMBDA #) {10058709C9}> #<CLOSURE (LAMBDA #) {1005872699}>) (#<CLOSURE (LAMBDA #) {10058709C9}> #<CLOSURE (LAMBDA #) {1005872699}> #<CLOSURE (LAMBDA #) {1005874369}>) (#<CLOSURE (LAMBDA #) {10058709C9}> #<CLOSURE (LAMBDA #) {1005872699}> #<CLOSURE (LAMBDA #) {1005874369}> #<CLOSURE (LAMBDA #) {1005876039}>) fib 5 = 5 fib 20 = 6765 fib 17 = 1597 fib 10 = 55 fib 6 = 8 1
I noticed thread-pool doesn't seem to destroy the threads it creates. Several cycles of starting and stopping the pool results in a bunch of unused anonymous threads. Is there a particular reason why threads in a stopped pool are not destroyed? A couple of lines inserted into stop-pool would destroy the no-longer-used threads:
(defmethod stop-pool ((thread-pool thread-pool))
(with-accessors ((threads threads)
(pool-size pool-size)
(running-p running-p)
(pool-lock pool-lock)
(pool-condition-vars pool-condition-vars)
(main-thread main-thread))
thread-pool
(setf running-p nil)
(bordeaux-threads:with-lock-held (pool-lock)
(bordeaux-threads:destroy-thread main-thread)
(map nil #'bordeaux-threads:destroy-thread threads)
(setf main-thread nil
threads nil
pool-condition-vars nil))))
Please consider adding :description, :author and :license information to your ASDF system. This will greatly help Quicklisp users and make it easier for them to report bugs.
More information:
http://blog.quicklisp.org/2015/05/looking-for-more-metadata.html
https://www.quicklisp.org
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.