Comments (3)
Those warnings are true, though: you really are blocking a thread. This is why we have pulsar.core/promise
. What behavior would you like to see? The only solution, AFAICT, is to have that other library (manifold?) integrate Pulsar, so that, if running in a fiber, would only block the fiber.
from pulsar.
Ah thanks, it makes sense now. I guess I was somehow thinking that derefing even non-pulsar things in a fiber would still only block that fiber/Strand! So this warning is in fact super useful β I just overlooked that critical part β..is blocking a threadβ in the long string.
In any case I think I can just link Aleph/Manifold to Pulsar on the callback level, e.g.
(defn websocket-handler [request]
(-> (aleph.http/websocket-connection request)
(manifold.deferred/on-realized (fn [user-socket]
(,,,)))))
it will just not be as smooth. Will explore this a bit further and potentially propose an integration at the Manifold repo.
from pulsar.
I should note that it's trivial to transform an asynchronous API to a fiber-blocking one using await
. Transforming a thread-blocking API to a fiber-blocking one requires a more work, and usually the cooperation of the library's author.
When integrating third-party libraries, you then have two options:
- Use
await
to recreate a convenient synchronous API on top of the library's async API. - Use channels (that work on threads and fibers alike) to communicate between a thread and a fiber.
from pulsar.
Related Issues (20)
- watch! fails when called from within a receive with an :else clause
- Selective receive breaks when spawning an actor on a redefined `defsfn` HOT 4
- (spawn-fiber #(rcv channel)) failing in the REPL
- supervisor does not appear to handle gen-server crashing HOT 9
- Automatic instrumentation HOT 6
- Pulsar fibers vs. core.async `go` blocks HOT 2
- Watching actors from a gen-server HOT 2
- shutdown! doesn't take cause/reason as an argument.
- Passing a symbol bound in let to gen-server throws an exception.
- call-timed! doesn't return nil HOT 1
- fvvvrv v vfvf
- auto instrumentation throwing ClassFormatError HOT 1
- clustered ping/pong in example not working
- Blocking and bound mailboxes - not working as expected HOT 2
- register! creates an mbean, need to remove with quasar HOT 1
- Mechanism for detecting when sending to a closed channel
- Status of pulsar HOT 3
- Clojure 1.10
- Support virtualThreads?
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
π Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google β€οΈ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from pulsar.