Giter Site home page Giter Site logo

Thread model questions about rx HOT 7 OPEN

lempiji avatar lempiji commented on May 15, 2024
Thread model questions

from rx.

Comments (7)

lempiji avatar lempiji commented on May 15, 2024

By default it will run in own thread.

The thread model is abstracted as Scheduler. If you want to switch, you can switch with TaskPoolScheduler, ThreadScheduler, observeOn or subscribeOn.

However, if you always want to run on UI threads, write the scheduler yourself.
An example of this is the DlangUIScheduler.

https://github.com/lempiji/rx/blob/dev/examples/scheduler-dlangui/source/app.d

from rx.

Robert-M-Muench avatar Robert-M-Muench commented on May 15, 2024

So, it's pretty simple to start some long-running tasks on a specific event and utilize multi-core machines? That's pretty cool...

What's the best way to exchange data between threads in RX manner? Or just use plain D infrastructure for this?

from rx.

Robert-M-Muench avatar Robert-M-Muench commented on May 15, 2024

From #33 "But keeping everything lock-free is really hard and tedious..."

Can you explain the thread concept a bit more? If I just use RX as is it's single-threaded? So, all the lock-free handling is there for cases, where I use a scheduler?

from rx.

Robert-M-Muench avatar Robert-M-Muench commented on May 15, 2024

Need to come back to this:

  • I just use RX as is. Nothing special, no scheduler, etc. Just out-of-the-box.

  • I have a single-threaded D app, which a couple of streams and many observers per stream.

  • The app crashes when there is a heavy load on the streams. I have the suspicion that this has something to do with multiple threads and some race-condition, that might origin from RX.

Some questions:

  1. When I put a value into a stream, will this start a new thread?

  2. When observers are notified, is this done sequentially or via threads?

from rx.

lempiji avatar lempiji commented on May 15, 2024

I'm back now.

A1. With simple usage, no threads are created. Always works on a single thread.

A2. Observers will be notified in the order they were subscribed. Internally, the Subject is just an array of Observers.

At the moment, threads are only created when using "debounce", "subscribeOn" or "observeOn".

If you suspect a crash due to data races between threads, look at "Thread.id" for something.

from rx.

Robert-M-Muench avatar Robert-M-Muench commented on May 15, 2024

Ok, thanks.

Any reason why you don't use std.signals for implementation? IMO that would make RX a bit more standard compatible.

from rx.

lempiji avatar lempiji commented on May 15, 2024

The reason is "lack of multi-thread support".

I think the method of unsubscribing in ReactiveX is superior to Signal's disconnect in terms of encapsulation and ownership.

from rx.

Related Issues (17)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.