[racket] Thread creation slow?
Using my gcstats library, I get the following info. GC is about 75%
of the total runtime, which surprises me since there should be no
garbage until all the channels are set up, which takes most of the
time. Note the extremely large amount of slop space.
305,562,856 bytes allocated in the heap
304,922,088 bytes collected by GC
1,755,839,256 bytes max heap size
975,524,384 bytes max slop
2,722,820,096 bytes peak total memory use
Generation 0: 64 collections, 25,581ms, 25,635.9ms elapsed
Generation 1: 6 collections, 4,980ms, 4,982.54ms elapsed
INIT time 12 ms
MUT time 9,461 ms ( 9,456.13 ms elapsed)
GC time 30,561 ms ( 30,618.52 ms elapsed)
TOTAL time 40,034 ms ( 40,086.65 ms elapsed)
%GC time 76.36% ( 76.40% elapsed)
Alloc rate 32,297,099 bytes per MUT second
for this slightly modified version:
#lang racket/base
(define leftmost (make-channel))
(define (setup-whispers left i n)
(if (>= i n)
left
(let ((right (make-channel)))
(thread (lambda ()
(channel-put left (+ 1 (channel-get right)))))
(setup-whispers right (+ 1 i) n))))
(define rightmost (setup-whispers leftmost 0 100000))
(thread (lambda () (channel-put rightmost 1)))
(channel-get leftmost)
On Fri, Aug 10, 2012 at 12:11 PM, Eric Dobson <eric.n.dobson at gmail.com> wrote:
> When I played around with it, I remember that the issue was that
> threads created a lot of garbage, and made collecting garbage slow. I
> could create about 400 times as many boxes in a chain and get the same
> gc time.
>
> This lead to a quadratic(ish) runtime for creating a bunch of threads,
> as each later GC took more time.
>
>
> On Fri, Aug 10, 2012 at 8:51 AM, Asumu Takikawa <asumu at ccs.neu.edu> wrote:
>> Hi all,
>>
>> On IRC the other day, this blog article about Racket came up:
>> http://cxwangyi.wordpress.com/2012/07/29/chinese-whispers-in-racket-and-go/
>>
>> In it, the author shows a program that creates many threads & channels
>> and then daisy-chains some communication through them. The Racket
>> version is significantly slower than the Go version (1 min. vs. 1 sec.).
>>
>> Is there a performance bug with thread creation here? Alternatively, is
>> there a different way of coding the example that would make it faster?
>>
>> Cheers,
>> Asumu
>> ____________________
>> Racket Users list:
>> http://lists.racket-lang.org/users
> ____________________
> Racket Users list:
> http://lists.racket-lang.org/users
--
sam th
samth at ccs.neu.edu