>They’re children. They don’t need to know where bacon and hot dogs come from.
not sure about that. Around age 7 i saw a full butchering of a pig at my grandmother's farm, and i was still happily eating pork for the next 20+ years, and i don't remember anybody in my childhood not knowing where the bacon is coming from. I stopped eating beef and pork though about 20 years ago exactly for the reason where it comes from.
Btw, "They don’t need to know where ... come from" can be said by the powers-to-be about people of any age.
You’ll never learn it by reading something. You have to experience it. Get your hands dirty.
Write a simple single-threaded http server that takes strings and hashes them with something slow like bcrypt with a high cost value (or, just sleep before returning).
Write some integration tests (doesn’t have to be fancy) that hammer the server with 10, 100, 1000 requests.
Time how performant (or not performant) the bank of requests are.
Now try to write a threaded server where every request spins up a new thread.
What’s the performance like? (Hint: learn about the global interpreter lock (GIL))
Hmm, maybe you’re creating too many threads? Learn about thread pools and why they’re better for constraining resources.
Is performance better? Try a multiprocessing.Pool instead to defeat the GIL.
Want to try async? Do the same thing! But because the whole point of async is to do as much work on one thread with no idle time, and something like bcrypt is designed to hog the CPU, you’ll want to replace bcrypt with an await asyncio.sleep() to simulate something like a slow network request. If you wanted to use bcrypt in an async function, you’ll definitely want to delegate that work to a multiprocessing.Pool. Try that next.
Learning can be that simple. Read the docs for Thread, multiprocessing, and asyncio. Python docs are usually not very long winded and most importantly they’re more correct than some random person vibe blogging.
https://datatracker.ietf.org/doc/html/rfc2136
reply