1
0
forked from Mirror/wren

Revise low level fiber semantics to play nicer with schedulers.

Now that I'm starting to write a real async scheduler on top of Wren's
basic fiber API, I have a better feel for what it needs. It turns out
run() is not it.

- Remove run() methods.
- Add transfer() which leaves the caller of the invoked fiber alone.
- Add suspend() to return control to the host application.
- Add Timer.schedule() to start a new independently scheduled fiber.
- Change Timer.sleep() so that it only transfers control to explicitly
  scheduled fibers, not any one.
This commit is contained in:
Bob Nystrom
2015-08-30 22:15:37 -07:00
parent 91af02ac81
commit 556af50f83
49 changed files with 469 additions and 350 deletions

View File

@ -0,0 +1,24 @@
var a = Fiber.new {
IO.print("a")
}
var b = Fiber.new {
IO.print("b before")
a.transfer()
IO.print("b after")
}
var c = Fiber.new {
IO.print("c before")
b.transfer()
IO.print("c after")
}
IO.print("start") // expect: start
c.transfer()
// expect: c before
// expect: b before
// expect: a
// Nothing else gets run since the interpreter stops after a completes.