Sönke, vibed is truly amazing! I am interested in the web server's internal
architecture. I always wanted to do an implementation of a web server using
a form of asymmetric, multi-process event-driven architecture. A web server
which utilises fibers. It would be nice if you explain the web-server
architecture of vibed in more details.

Keep up with good work!

Regards

Thanks! I will add a page with graphical explanation on the website when I have some time. But in short all fibers are currently living in the same thread. Each fiber is registered with one or multiple events inside of the event driver (libevent based currently). As soon as an event arrives, the corresponding fiber is resumed. The fiber will then simply do conceptually this for every blocking operation:

blockingOperation(){
        requestOperation();
        while( !operationFinished() ) yield();
}

I've thought about sharing fibers across threads but came to the conclusion that this is probably more trouble than it's worth. An alternative would be to start multiple event loops in separate threads and then distribute incoming connections to these loops before starting a corresponding fiber.

Right now its at least possible to off-load all computational tasks using std.concurrency or std.parallelism or similar. An efficient asynchronous wait function for a std.concurrency message or for a std.parallelism task would be useful though.

Reply via email to