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:
@@ -6,9 +6,9 @@ var fiber = Fiber.new {
|
||||
IO.print("fiber 3")
|
||||
}
|
||||
|
||||
var result = fiber.call() // expect: fiber 1
|
||||
fiber.call() // expect: fiber 1
|
||||
IO.print("main 1") // expect: main 1
|
||||
result = fiber.call() // expect: fiber 2
|
||||
fiber.call() // expect: fiber 2
|
||||
IO.print("main 2") // expect: main 2
|
||||
result = fiber.call() // expect: fiber 3
|
||||
fiber.call() // expect: fiber 3
|
||||
IO.print("main 3") // expect: main 3
|
||||
|
||||
Reference in New Issue
Block a user