Re:Async Python is not faster
by michaelcampbell on Friday June 12, 2020 @11:03AM
(#23499946)
> The point of coroutines is absolutely to make my code execute faster.
I think rather the point is to make your APPLICATION either finish in less time, or to not take MORE time when given more load.
The code runs as fast as it runs, coroutines notwithstanding.
Re:Async Python is not faster
by kerkeslager on Friday June 12, 2020 @11:42AM
(#23500350)
> > The point of coroutines is absolutely to make my code execute faster.
> I think rather the point is to make your APPLICATION either finish in less time, or to not take MORE time when given more load.
Potato potato.
Re:Async Python is not faster
by michaelcampbell on Friday June 12, 2020 @12:18PM
(#23500715)
Well, sure, anything can mean anything if you're willing to redefine what words mean.
Re:Async Python is not faster
by kerkeslager on Friday June 12, 2020 @01:09PM
(#23501344)
The meaning of words is determined by usage. Usage of words is determined by the meaning. This circular definition causes the inherent problem of language: words don't have inherent meaning. The best I can do is to attempt to use words in a way similar to the way that you use words, but I can only ever make an educated guess about how you use words, so it's never going to be perfect.
And from my perspective, I don't think it's unreasonable for me to expect you to try to understand what I'm trying to communicate, rather than attempting to force me to use different words. The burden of communication is shared by both speaker and listener.
Re:Async Python is not faster
by earthboundkid on Friday June 12, 2020 @04:56PM
(#23503816)
“Faster” is not a well defined technical term. It is a piece of natural language that can easily refer to max time, mean time, P99, latency, throughput, price per watt, etc. depending on context.
This is a quintessential example of not seeing the forest for the trees.
The point of coroutines is absolutely to make my code execute faster. If a completely I/O-bound application sits idle while it waits for I/O, I don't care and I should not care because there's no business value in using those wasted cycles. The only case where coroutines are relevant is when the application isn't completely I/O bound; the only case where coroutines are relevant is when they make your code execute faster.
It's been well-known for a long time that the majority of processes in (for example) a webserver, are I/O bound, but there are enough exceptions to that rule that we need a solution to situations where the process is bound by something else, i.e. CPU. The classic solution to this problem is to send off CPU-bound processes to a worker over a message queue, but that involves significant overhead. So if we assume that there's no downside to making everything asynchronous, then it makes sense to do that--it's not faster for the I/O bound cases, but it's not slower either, and in the minority-but-not-rare CPU-bound case, it gets us a big performance boost.
What this test is doing is challenging the assumption that there's no downside to making everything asynchronous.
In context, I tend to agree with the conclusion that there are downsides. However, those downsides certainly don't apply to every project, and when they do, there may be a way around them. The only lesson we can draw from this is that gaining benefit from coroutines isn't guaranteed or trivial, but there is much more compelling evidence for that out there.