3 ms·
I won't argue that async software thread per hardware thread style will have better maximum performance than a thread-per-request style, but I think that differ
by thrownaway2424 11y ago
I won't argue that async software thread per hardware thread style will have better maximum performance than a thread-per-request style, but I think that difference will not be material in most applications (the difference between the two styles of C++ server programming being far smaller than the difference between, say, a Go program and a C++ program), and the cost paid in code readability is pretty high. All that async continuation passing makes your code a twisty maze, and that style is fraught with lifetime problems that are the very thing most C++ haters are complaining about. In synchronous style all the allocations are scoped by nature. In async style the programmer has to assign ownership of everything to some master continuation that will delete them all in the final callback. That adds a lot of code.
- jcoffland 11y agoYou are right about the added difficulty of resource ownership in the face of asynchronous code. This is a trade off. lambda functions in C++11 can help with this. They make it possible to pass resource allocations (smart pointers) through to callbacks.
- zzzcpan 11y ago> All that async continuation passing makes your code a twisty maze On the contrary, it gives your code clarity, consistency and predictability. > some master continuation that will delete them all in the final callback Even nginx in plain C is not doing that, but simply creates destructors on allocation to avoid tracking stuff manually. Just don't jump into the first thing you read somewhere, remember one simple rule: if it feels harder than threads - you are doing it wrong.
- SamReidHughes 11y ago> On the contrary, it gives your code clarity, consistency and predictability. Well, when a product I worked on gradually migrated from event loops with callbacks to threads, clarity, consistency, and predictability made big improvements. Some callback usage would have been better with C++11 or C++14, but it's still way worse than what you can do simply by having variables go in and out of scope on a stack.