Hi Amirouche, Amirouche Boubekki <amirou...@hypermove.net> writes:
>> You test5 code should definitly work. Otherwise, it requires to pre-allocate >> as many thread as you need before you know you will them. May be we can look >> at it backward and say, that allocating a pool of threads in advance is more >> interesting performance wise. But the cost of allocating a thread pool is very small compared to the cost of a doing git clone, which may take a minute or so. >>> Anyway, try to spawn the thread and/or create the channel before you >>> run fibers. I can't try that myself because of my slow connection which >>> takes ages to install guile-fibers. I can't do that because in the program I'm working on (Cuirass), the first calls to RUN-FIBERS and SPAWN-FIBER happen very early[1]. They are kind of the entry point of the program. At that time I don't know how many repositories I will need to fetch simultaneously. Thus test3 and test6 don't meet my needs. [1]: https://git.savannah.gnu.org/cgit/guix/guix-cuirass.git/tree/bin/cuirass.in#n144 >>> Something like: >> >> (use-modules (fibers)) >> (use-modules (fibers channels)) >> >>> (define (test6) >>> (let ((channel (make-channel))) >>> (call-with-new-thread >>> (lambda () >>> (put-message channel "hello world"))) >>> (run-fibers >>> (lambda () >>> (spawn-fiber >>> (lambda () >>> (format #t "~a~%" (get-message channel))))) >>> #:drain? #t))) >> >> It works on my side. > > FWIW, the following code doesn't crash, but apparently does nothing: > > (define (test7) > (let ((channel (make-channel))) > (run-fibers > (lambda () > (spawn-fiber > (lambda () > (call-with-new-thread > (lambda () > (put-message channel "hello world"))) > (format #t "~a~%" (get-message channel))))) > #:drain? #t))) This crashes the same way test5 does, you need to run it more :-)