Imagine there was a blocking!() macro that offloads a piece of code onto the blocking pool, kind of like spawn_blocking() with a nicer syntax. Then we could simply use std::fs::read_to_string() inside this macro. 5/13pic.twitter.com/GTjnEdHXrq
This is the legacy version of twitter.com. We will be shutting it down on June 1, 2020. Please switch to a supported browser, or disable the extension which masks your browser. You can see a list of supported browsers in our Help Center.
async runtimes and concurrency primitives in @rustlang he/they (available for hire)
You can add location information to your Tweets, such as your city or precise location, from the web and via third-party applications. You always have the option to delete your Tweet location history. Learn more
Add this Tweet to your website by copying the code below. Learn more
Add this video to your website by copying the code below. Learn more
By embedding Twitter content in your website or app, you are agreeing to the Twitter Developer Agreement and Developer Policy.
| Country | Code | For customers of |
|---|---|---|
| United States | 40404 | (any) |
| Canada | 21212 | (any) |
| United Kingdom | 86444 | Vodafone, Orange, 3, O2 |
| Brazil | 40404 | Nextel, TIM |
| Haiti | 40404 | Digicel, Voila |
| Ireland | 51210 | Vodafone, O2 |
| India | 53000 | Bharti Airtel, Videocon, Reliance |
| Indonesia | 89887 | AXIS, 3, Telkomsel, Indosat, XL Axiata |
| Italy | 4880804 | Wind |
| 3424486444 | Vodafone | |
| » See SMS short codes for other countries | ||
This timeline is where you’ll spend most of your time, getting instant updates about what matters to you.
Hover over the profile pic and click the Following button to unfollow any account.
When you see a Tweet you love, tap the heart — it lets the person who wrote it know you shared the love.
The fastest way to share someone else’s Tweet with your followers is with a Retweet. Tap the icon to send it instantly.
Add your thoughts about any Tweet with a Reply. Find a topic you’re passionate about, and jump right in.
Get instant insight into what people are talking about now.
Follow more accounts to get instant updates about topics you care about.
See the latest conversations about any topic instantly.
Catch up instantly on the best stories happening as they unfold.
Imagine there was a blocking!() macro that offloads a piece of code onto the blocking pool, kind of like spawn_blocking() with a nicer syntax. Then we could simply use std::fs::read_to_string() inside this macro. 5/13pic.twitter.com/GTjnEdHXrq
That's actually not too bad! If we have the blocking!() macro, we don't really need async versions of any of the standalone functions in the std::fs module. 6/13
What about the File type, though? In the vast majority of uses, files are only read or only written. Seeking is not a very common operation - in fact, I'd say seeking is a vestigial function that is now superseded by read_at()/write_at() functions. 7/13
We need an adapter that takes anything implementing Read/Write and converts it into an async type implementing AsyncRead/AsyncWrite. Let's create functions reader()/writer() that look like this. 8/13pic.twitter.com/xY3aMJeyY1
When reader()/writer() is called, a blocking task gets spawned that reads/writes data from the file and pipes it through an async channel. Here's how we'd convert a file into an async reader. 9/13pic.twitter.com/OvlQ6qZZwk
Now we don't even need tokio::io::{stdin,stdout,stderr} anymore. Functions reader()/writer() can easily do asynchronous standard input/output. 10/13pic.twitter.com/iubNUkWfTX
There's just one more async adapter... Similarly to reader()/writer(), let's create iter() that converts any blocking iterator into an async stream. 11/13pic.twitter.com/4rU0eYFAXg
Function iter() comes in handy when listing files in a directory, for example. This is how we can list files asynchronously using the standard APIs from std::fs. 12/13pic.twitter.com/PN8NDo0KWN
There you go. If we have blocking!(), reader(), writer(), and iter(), there's really no need to have modules like tokio::fs or even tokio::io. We can just use std::fs and std::io and apply async adapters to them! 13/13pic.twitter.com/Sym6Qbjnlf
Wait- if we're spawning blocking i/o operations into a thread pool, doesn't that defeat the purpose of using async i/o in the first place? We already have techniques for doing stuff in a thread pool; I had understood that context switching becomes an issue.
Networking can be done truly asynchronously using epoll/kqueue/WSAPoll. However, OSs don't handle async files and some other things as well. In those cases there isn't a better solution than offloading blocking operations onto a threadpool. Other runtimes like Go's do the same.
Sure, but given that, I don't understand the novelty of what's being presented here. The thread opens with "here's how to asyncify any filesystem API" but it's just a thin layer over "spawn it in a thread pool"?
Or maybe there is?https://github.com/spacejam/rio
Twitter may be over capacity or experiencing a momentary hiccup. Try again or visit Twitter Status for more information.