On Friday, 3 May 2024 at 17:12:40 UTC, Dmitry Olshansky wrote:
On Monday, 29 April 2024 at 20:50:59 UTC, Dmitry Olshansky wrote:
On Monday, 29 April 2024 at 20:50:24 UTC, Dmitry Olshansky wrote:
Photon is a minimalistic multi-threaded fiber scheduler and event loop that works transparently with traditional blocking I/O C/C++/D/Rust libraries w/o degrading performance.


And now we have Channels, gentelmen. The only missing bit is `select` function to multiplex on a bunch of channels.

And the wait is over! Now there is a select function to multiplex on read side of a bunch of channels. This also fixes a bug in the poll syscall override with multiple events on posix systems

https://github.com/DmitryOlshansky/photon/blob/master/examples/select.d

```d
module examples.select;

import std.range, std.datetime, std.stdio;

import photon;

void main() {
    startloop();
    auto first = channel!(int)(2);
    auto second = channel!(string)(1);
    go({
        delay(500.msecs);
        first.put(0);
        first.put(1);
        delay(500.msecs);
        second.put("ping");
    });
    go({
        foreach ( _; 0..3) {
            select(
                first, {
                    writefln("Got first %s", first.take(1));
                },
                second, {
                    writefln("Got second %s", second.take(1));
                }
            );
        }
    });
    runFibers();
}

```

---
Dmitry Olshansky
CEO @ [Glow labs](https://glow-labs.pro)
https://olshansky.me/about/


Reply via email to