Comments (4)
I think in general it's hard to have a general definition of what it means to be done.
scheduler-work-pending?
My idea to workaround the above behavior was the change the definitions of scheduler-work-pending?
to with another clause in the and
that looks like (zero? (scheduler-waiting-thread scheduler))
where scheduler-waiting-thread
is a count of threads that are blocked inside get-message
or put-message
.
scheduler-work-pending? has the advantage that it's a simple and clear definition, but it is not universal. If you need another definition of "done", for example your definition above, you need to arrange to have the initial fiber outlast the tasks you are concerned with.
That is what I documented in the previous comment.
Thanks for the feedback! 👍
from fibers.
That said, for my usecase, run-fibers does not return, so this issue does not show up.
There is a workaround where one can properly manage the life of the threads created with call-with-new-thread
and wait for the count of threads to become zero in the init procedure of run-fiber
.
from fibers.
Maybe a parent-thread-scheduler
parameter can help to solve the issue.
from fibers.
run-fibers #:drain? #t
means to run until schedule-work-pending?
returns false. scheduler-work-pending?
returns true if there are pending timeouts or pending runnable tasks. Neither is the case for fibers waiting on external events; in this case messages on channels. From the point of view of scheduler-work-pending?
, this program is undistinguishable from:
(define (main)
(spawn-fiber (lambda () (get-message channel))))
I think in general it's hard to have a general definition of what it means to be done. scheduler-work-pending?
has the advantage that it's a simple and clear definition, but it is not universal. If you need another definition of "done", for example your definition above, you need to arrange to have the initial fiber outlast the tasks you are concerned with.
from fibers.
Related Issues (20)
- Something like promises HOT 5
- Test failures with "wrong state" on aarch64 HOT 1
- Expensive tests should be skipped by default
- Failing to create a non-blocking socket inside fiber HOT 2
- Configure dosnt't look up for libgc headers
- Q: Does it support racket? or how to use it in racket HOT 1
- Unbound variable: SOCK_NONBLOCK on MacOS 14.5
- `race-until` test runs forever (1.2.0 + affinity patch, NetBSD 9 amd64) HOT 1
- Cannot print backtraces within a fiber HOT 13
- [doc] clarify the use of dynamic-wind, probably in the Barriers chapter HOT 1
- Guile deprecation warning due to bit-count HOT 9
- Fibers wait can forever on a file descriptor once it has been closed HOT 1
- 'get-message' continuation fired more than once? HOT 13
- On GNU/Hurd, 'time_units_per_microsec' is zero HOT 1
- High CPU usage on system time change HOT 7
- Documentation refers to `send-operation` instead of `put-operation`
- Implementing thread-operation HOT 10
- concurrent-web-server doesn't wait for the server to be started HOT 1
- Missing basic combinators `guard-operation` and `nack-guard-operation`
- fibers does not support wait-operation being interrupted, even when on a non-fibers thread HOT 6
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 fibers.