|P is for Practical|
Trying to Understand the Discouragement of Threadsby benwills (Sexton)
|on Nov 18, 2014 at 06:18 UTC||Need Help??|
benwills has asked for the wisdom of the Perl Monks concerning the following question:
In the most sincere and blunt sense of the word, I've been a hack programmer since I started about 20 years ago. I never went deep into learning the art of programming, but could usually Frankenstein together what I needed. I'm stating this so you may consider the source (that would be me) of this question about why the use of threads is discouraged...
I've spent the last two+ weeks learning(ish) perl to write the leanest and fastest threaded/asynchronous/parallel/forked code to perform a pretty basic task, millions of times a day (downloading web pages). In the process, I tried every forking/parallel/asynchronous/threaded solution I could hack together. I tried every http client I could find. I tested all of them in terms of speed, accuracy, and resource usage. (If it's important: in the end, I went with a pure-perl socket connection (not IO::Socket, but Socket) with some fine tuning of my own.)
But, more to the point of the question, I found that absolutely no solution competed with threads in any way, shape, or form. Every non-thread solution was much heavier than threads, functioned much slower, and, for whatever reason (additional layers of code?), produced less accurate results and required more "management" in the code.
Yes, figuring out the right threads solution took longer. But for the best solution (if threads is the best solution), I'll spend an extra few days on it to get it right.
I've seen the heated debates about thread usage. I've read just about every single piece of threaded code BrowserUK has posted (and couldn't have written what I wrote without his help in the forums). And I've tested it all for my own use. And the answer is clear: threads wins, hands down.
So: why such severe discouragement? Because it's a little more confusing and not as straightforward? Is there something I'm missing in terms of performance? Is my code situation unique to where threads are outperforming the alternatives, and this is uncommon?
I found absolutely zero public data on performance comparisons, but lots of assertions about performance that contradicted my own tests.
So, I'm just confused and, if I'm missing something, would love to know how to look at this differently.
But, if I'm not confused, then why are threads so actively and severely discouraged? I'm really just trying to understand this.
And if this isn't the place for this question, let me know where a more appropriate forum would be.
Thanks for any help/pointers/thoughts you have that could help me understand this better.