Comments (1)
Hi Mahdi @mrakh, sorry for the late response. I'm very glad this library is useful to you.
I prefer the usage described below to solve your problem.
// `MyArg` is the struct the co arg is pointing to
struct MyArg{
// yieldReason: [sleep, poll_fd, poll_iouring]
int yieldReason;
void* yieldRetValue
// other members
/* ... */
}
// Inside coroutine
/* setup MyArg to this co */
/* prepare io_uring_task */
/* bind this co to the io_uring_task */
/* submit io_uring_task */
/* MyArg->yieldReason = POLL_IOURING */
aco_yield()
if check MyArg->yieldRetValue ok
handle the ready io_uring_task
else
handle the error
// inside the scheduler
for{
// scheduler loop
// do other stuff...
// io_uring stuff
io_uring_peek_cqe // nonblock waiting
if co ready
// resume the ready co
aco_resume(co)
end
// do other stuff...
}
I think it is better to let the scheduler do the as minimal task as possible, including event polling like fd polling, and io_uring task polling in this case. (I didn't yet dive very deeply into the io_uring, so please correct me if I got a mistake.)
from libaco.
Related Issues (20)
- Document c standard library dependencies
- Status and Future Plans of libaco
- can libaco support yield/resume between threads? HOT 3
- Provide way to return error to caller instead of calling `abort()` on failed assertions HOT 1
- is it worth to create coroutine inside coroutine?
- which one better to pass argument to co function
- 关于libco bug的疑问
- Thread local storage support HOT 1
- Feature Request: aco_get_co() return NULL when the caller is main co HOT 4
- is 120byte the lowest we can have? possible to lower this? HOT 1
- Do libaco coroutines run on different CPUs at the same time. i.e. does the program performance benefit from having multiple CPUs HOT 2
- Question: which is faster, creating new coroutines or reusing old coroutines HOT 3
- resume multiple coroutines in parallel HOT 1
- Integrate into our io engine? HOT 1
- add arm32/aarch64 support for android and ios HOT 1
- `aco_amd64_inline_short_aligned_memcpy_test_ok` size alignment
- whether this description is incorrect
- Few questions about proper usage
- is aco_exit necessary?
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 libaco.