Hi all!
I'm facing a weird situation... I tracked down in a program of mine a bottleneck which came up to be a call to thread-send. After addint a (time ...) around it I found that it takes around ~20 ms to perform the thread send (which I believe is pretty slow):
(time (thread-send user-interface-thread `(redraw ,level))) 24 ms real time 20 ms cpu time (10 user, 10 system) 1 collection accounting for 2 ms real time (0 user, 0 system) 40536 bytes allocated no minor faults no major faults (time (thread-send user-interface-thread `(redraw ,level))) 18 ms real time 10 ms cpu time (10 user, 0 system) no collections 37900 bytes allocated no minor faults no major faults
I'd like to note here that level in the code sample above is a rather big data structure, but I believe this is irrelevant because only the pointer should be passed down?
Strangely, I tried to reproduced the behaviour in a repl but I only happened to get ~0ms for these thread-send calls:
(define t (make-thread (lambda () (let loop () (pp (thread-receive)) (loop))))) (thread-start! t)
#<thread #2>
(time (thread-send t 'allo))
(time (thread-send t 'allo)) 0 ms real time 0 ms cpu time (0 user, 0 system) no collections 24 bytes allocated no minor faults no major faults
allo
(time (thread-send t 'allo)) (time (thread-send t 'allo)) 0 ms real time 0 ms cpu time (0 user, 0 system) no collections 24 bytes allocated no minor faults no major faults
allo
Thank you very much for your help!
David