Comments (4)
Thanks for opening the issue! It's a good question, and I think we can revisit this design choice.
How is the Dispatcher's run different than just using the unsafe global provided?
Here are three advantages of using Dispatcher#unsafeRun
over IO#unsafeRun*
:
- You can have a dispatcher in a generic effect
F[_]
i.e.Dispatcher[F]
- A dispatcher has a scope / lifecycle i.e. it is a
Resource[F, Dispatcher[F]]
. You can be confident that tasks are not being leaked after the dispatcher has been closed. - A
Dispatcher
is backed by an already running "warm" fiber. Meanwhile,IO#unsafeRun*
has to do extra set-up every time it is used, e.g. registering fatal error handlers.
Should feral replace its
unsafeRunSync
with a Dispatcher per the advice above?
Yes and no :) point (3) above is a good motivation to create a dispatcher when the lambda starts and use it to handle all incoming requests.
The question is, how will we get that dispatcher? Since the only way to create a Dispatcher
is inside of an effectful resource, but without the dispatcher we can't run any effects.
So, we will still need IO#unsafeRun*
. We can use this exactly once to obtain a dispatcher during the setup process, that we can then use for all subsequent requests.
Does that answer your question? Thanks, and PRs welcome for this :)
from feral.
Shout out @kamilkloch :)
from feral.
So are you suggesting that with both Feral and my work, we should bootstrap a Dispatcher like a resource for the lifetime of the lambda, and then continually use that Dispatcher for the times when we need to be unsafe?
from feral.
Yes, exactly. It seems to me that an application should never have to call IO.unsafeRun*
more than once: instead, it can use that one call to setup a Dispatcher
, and use that for all subsequent unsafe calls.
from feral.
Related Issues (20)
- Support other serialization formats besides JSON HOT 2
- v0.1.0 HOT 4
- Lambda output empty with 1.0.0-M1 HOT 5
- natchez integration and lambda init HOT 3
- ES Module support HOT 19
- Giter8 Template(s) HOT 5
- Scala Native support HOT 1
- Idea: Simple and scalable mechanism for bundling lambdas into services HOT 8
- Make Feral more amenable to SnapStart optimization? HOT 1
- Should the return type of init really be a Resource? HOT 1
- Add feral-otel4s integration
- Integrate feral-lambda with otel4s HOT 4
- Document how to deploy with scala-cli HOT 1
- feral example code Http4sLambda.scala does not work for JVM in AWS Lambda HOT 4
- Deprecate KinesisStreamEvent
- Can't print logs using `IO.println` HOT 2
- Support Vercel HOT 1
- 0.2.x -> 0.3.x scalafixes
- MiMa Configuration HOT 2
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 feral.