Asynchronous processing is more efficient -- surely not?
Steven D'Aprano
steve+comp.lang.python at pearwood.info
Wed Apr 4 03:27:42 EDT 2018
So, I'm, still trying to wrap my brain around async processing, and I
started reading this tutorial:
http://stackabuse.com/python-async-await-tutorial/
and the very first paragraph broke my brain.
"Asynchronous programming has been gaining a lot of traction in the past
few years, and for good reason. Although it can be more difficult than
the traditional linear style, it is also much more efficient."
I can agree with the first part of the first sentence (gaining a lot of
traction), and the first part of the second sentence (more difficult than
the traditional style), but the second part? Asynchronous processing is
*more efficient*?
I'm no expert, but it seems to me that this has surely got to be crazy
talk. Whatever task you're doing, processing it asynchronously doesn't
reduce the amount of work. For example, if you want to download ten
files, you still have to download all ten files, and they're not any
smaller or the network connection any faster because you're using async.
On the contrary, surely it is *less efficient*: there's the amount of
work you need to do, the *useful* work (downloading those files) PLUS a
bunch of book-keeping work (most, but not all, done for you in the async
framework or language) needed to swap jobs.
I can see that the advantage of async is to *increase responsiveness*.
You aren't waiting a long time for each file to download (or the page to
render, or whatever task it is that you are doing) before being able to
start the next one. Quoting the article:
"With asynchronous programming, you allow your code to handle other tasks
while waiting for these other resources to respond."
Yes, this exactly. And if you're writing a web app, or certain kinds of
desktop apps, these seems sensible. I don't want my browser to come to a
complete halt just because some resource is taking a few seconds to
respond.
But honestly, from everything I've seen, outside of browser apps (and I'm
not even sure about them), async processing looks to me like the wrong
solution to, well, everything. It combines the worst of sequential and
parallel processing with the benefits of neither. It's like cooperative
multi-tasking, only without the actual multi-tasking and even less
convenience. Its harder to use than threading or multiprocessing, but
without their ability to run in parallel. It lacks the isolation of
multiprocessing, and the preemptive task swapping of threads/processes.
Its as hard to wrap your brain around as parallel processing in general,
but with even worse performance than sequential processing.
Am I totally wrong?
--
Steve
More information about the Python-list
mailing list