---------- Forwarded message ---------- From: Henning Diedrich <h...@authentic-internet.de> Date: Sun, Nov 15, 2009 at 4:20 AM Subject: Re: [Stackless] Google's new Go programming language To: Richard Tew <richard.m....@gmail.com>
Richard Tew wrote: On Fri, Nov 13, 2009 at 4:06 AM, Henning Diedrich <h...@authentic-internet.de> wrote: Richard Tew wrote: On Thu, Nov 12, 2009 at 2:56 PM, Andrew Dalke <da...@dalkescientific.com> wrote: On Nov 11, 2009, at 9:35 PM, Richard Tew wrote: They have an nice example where they chain 100000 microthreads each wrapping the same function that increases the value of a passed argument by one, with channels inbetween. Pumping a value through the chain takes 1.5 seconds. I can't imagine that Stackless will be anything close to that, given the difference between scripting and compiled code. Did I mess up in my benchmark? I got about 0.07 seconds to go through 100,000 microthreads. Interesting. I hadn't gone to the effort of writing it yet. I expected the difference between a compiled language and a scripting language to be more significant. Well, it IS pretty impressing. Just the other way round. Was it really the equivalent to the Go test? It was slightly more complicated than the go test, which only sent one value through. The go test was in the tech talk presentation, I can't find a text version of it to link to unfortunately. Found it I guess: ------------------------------------------------------------ Go benchmark: Pg.4, http://golang.org/doc/go_talk-20091030.pdf package main import ("flag"; "fmt") var ngoroutine = flag.Int("n", 100000, "how many") func f(left, right chan int) { left <- 1 + <-right } func main() { flag.Parse(); leftmost := make(chan int); var left, right chan int = nil, leftmost; for i := 0; i < *ngoroutine; i++ { left, right = right, make(chan int); go f(left, right); } right <- 0; // bang! x := <-leftmost; // wait for completion fmt.Println(x); // 100000 } ------------------------------------------------------------ To contrast it on one page, here is Andrew's Stackless benchmark again: ------------------------------------------------------------ import stackless def source(ch): ch.send_sequence(range(10)) ch.close() def chain(up, down): for item in up: down.send(item+1) down.close() def sink(up): for item in up: print item def startup(): down = stackless.channel() stackless.tasklet(source)(down) for i in range(100000): up = down down = stackless.channel() stackless.tasklet(chain)(up, down) stackless.tasklet(sink)(down) import time t1 = time.time() startup() t2 = time.time() stackless.run() t3 = time.time() print "startup time:", "%.3f" % (t2-t1) print "10 elements in:", "%.3f" % (t3-t2) ------------------------------------------------------------ _______________________________________________ Stackless mailing list Stackless@stackless.com http://www.stackless.com/mailman/listinfo/stackless