On 2014-03-07 21:11:12 +0000, Bienlein said:

What they are saying on their web site is that they are using fibers and at the same time they say they are using libevent. That is confusing for me. On http://vibed.org/features they write: "Instead of using classic blocking I/O together with multi-threading for doing parallel network and file operations, all operations are using asynchronous operating system APIs. By default, >>libevent<< is used to access these APIs operating system independently."

Further up on the same page they write: "The approach of vibe.d is to use asynchronous I/O under the hood, but at the same time make it seem as if all operations were synchronous and blocking, just like ordinary I/O. What makes this possible is D's support for so called >>fibers<<".

That is all correct. Libevent supplies the polling an async io. D provides the ability to do fibers. Mixed together you get a very probust, easy to program, scalable, web platform. See below.


It does. Bienlein has a very vague knowledge of topics he
comments about.

I thought the vibe.d guys would shed some light at this at the occasion, but no luck. What I don't understand is how fibers can listen to input that comes in through connections they hold on to. AFAIKS, a fiber only becomes active when it's call method is called. So who calls the call method in case a connection becomes active? That is then again a kernel thread? How does the kernel thread know something arrived through a connection? It can't do a blocking wait as the system would run out of kernel threads very quickly.

Fibers are cooperatively multitasked routines. Whenever vibe-d uses a libevent IO function, it yields it's current operation back to the event loop. When a libevent poll indicates there is data waiting, it resumes that fiber where it was left off. The vibe-d event loop is essentially the scheduler for the fibers.

Reply via email to