Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Who are the competitors? #85

Open
goodboy opened this issue Oct 20, 2019 · 9 comments
Open

Who are the competitors? #85

goodboy opened this issue Oct 20, 2019 · 9 comments
Labels
discussion help wanted Extra attention is needed question Further information is requested

Comments

@goodboy
Copy link
Owner

goodboy commented Oct 20, 2019

There are a few "fronts" where this project is seeking to discover new low level solutions to problems in distributed computing. The main distinction is adherence to structured concurrency at the task and process level such that cancel-able CPU bound work is the new norm; of course we're also strongly tied to the development of trio and its paradigms.

There are quite a few modern projects in this space and their is likely lots to learn from each.

I've broken down some categories I've thought out but of course more are welcome.

actor model (in other languages or Python frameworks)

  • pulsar
  • spritely another actor model for racket, but with a focus on object capabilities and something called datashards for decentralized storage (I think) - thanks @salotz
  • syndicate: implemented in racket and javascript
  • quasar a lib for java and kotlin, though a lot of the links seem defunct
  • dramatiq has actors but appears to be geared for replacing celery (thanks @salotz).
  • I hadn't noticed before that ray actually has "actors" (thanks to @nmichaud for pointing this out) though it's pretty clear they're not really fitting the academic definition.
    • ray actually is a major competitor in terms of its api simplicity and integration with "data science" related frameworks.
  • stateright is a small rust actor lib with an emedded model checker and GUI for it (thanks @guilledk)

distributed computing (CSP, RPC, MAS) :

python specific

  • aiomass: asyncio based MAS and RPC
  • rpyc: mature rpc framework in python
  • execnet: legacy inter-interpreter IPC system from the original creator of pytest
  • an anyio based implementation of gRPC: purerpc

other langs, prots, rpcs

worker pool / parallel job processing

cancel-able cpu bound work

data streaming / pipelining

self replicating, take over the world, skynet type stuff:

alternative concurrency models

  • monte : object capability language in pypy with python-like syntax but in the E-lang tradition. The concurrency story is interesting here with the idea of "vats" which is worth reading about. - thanks @salotz
@phaustin
Copy link

Also worth mentioning:

https://joblib.readthedocs.io/en/latest/

which uses:

https://loky.readthedocs.io/en/stable/

@goodboy
Copy link
Owner Author

goodboy commented Oct 21, 2019

@phaustin slick, thanks for the links. Added them in.

@goodboy
Copy link
Owner Author

goodboy commented Jan 28, 2020

Some more actor model options from different language suggested by @salotz:

  • syndicate: implemented in racket and javascript
  • quasar a lib for java and kotlin, though a lot of the links seem defunct

@salotz
Copy link
Collaborator

salotz commented Jan 28, 2020

quasar isn't defunct, its just that the main author went off to work on project Loom for the JVM so that quasar actually has a purpose (unlike python "threads"). Syndicate is interesting because of some of the design patterns over actors that it provides for distributed systems along the lines of tuple spaces. Let me add a few more things with interesting links to actor modelly things:

  • https://gitlab.com/spritely another actor model for racket, but with a focus on object capabilities and something called datashards for decentralized storage (I think)
  • https://www.monte-language.org/ : object capability language in pypy with python-like syntax but in the E-lang tradition. The concurrency story is interesting here with the idea of "vats" which is worth reading about.

@goodboy goodboy added discussion help wanted Extra attention is needed question Further information is requested labels Feb 10, 2020
@salotz
Copy link
Collaborator

salotz commented Feb 29, 2020

As usual I have no code but more projects to compare to :P

https://dotnet.github.io/orleans/Documentation/index.html

Also the Akka documentation seems thorough and is in general I think a success story (albeit super heavyweight):

https://doc.akka.io/docs/akka/current/general/actor-systems.html

@goodboy
Copy link
Owner Author

goodboy commented Mar 1, 2020

@salotz hehe fine by me.

I actually mention aka and orleans in #18 funny enough.
I guess linking the discussions is of use to some degree.

@goodboy
Copy link
Owner Author

goodboy commented Jun 23, 2020

I started digging through the core of locust and was interested in how they do their multi-processing stuff to find out that they kinda, don't do anything, heh, despite having a pretty cool design what with gevent and zeromq 😄 for their "worker pool" thing.

I just so happened to discover (whilst looking for non-existing process spawning code) that gevent has a coolio processing spawning system gevent.os.fork() which seems to do some supervisory management stuff. At the very least I'd like to dig through the code in preparation for #117.

@goodboy
Copy link
Owner Author

goodboy commented Sep 15, 2020

This is a cool blog post by the ray peeps that goes through comparisons with multiprocessing. Obviously they're cheating to some degree since the core of ray is C++.

I think doing the same but with the SharedArray from piker and tractor would be a great exercise for both bench-marking and API scrutiny.

@jkleckner
Copy link

jkleckner commented Nov 25, 2021

An interesting alternative in the Scala language is zio [1].

It uses Structured Concurrency and makes this statement [2]:

ZIO has support for structured concurrency. The way ZIO structured concurrency works is that the child fibers are scoped to their parent fibers which means when the parent effect is done running then its child's effects will be automatically interrupted. So when we fork, and we get back a fiber, the fiber's lifetime is bound to the parent fiber, that forked it. It is very difficult to leak fibers because child fibers are guaranteed to complete before their parents.

The structure concurrency gives us a way to reason about fiber lifespans. We can statically reason about the lifetimes of children fibers just by looking at our code. We don't need to insert complicated logic to keep track of all the child fibers and manually shut them down.

See also: #18 #118

[1] https://github.com/zio/zio
[2] https://github.com/zio/zio/blob/master/docs/datatypes/fiber/index.md#structured-concurrency

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
discussion help wanted Extra attention is needed question Further information is requested
Projects
None yet
Development

No branches or pull requests

4 participants