Q1.What does the Global Interpreter Lock (GIL) prevent in CPython?
Q2.For a CPU-bound task in Python, which approach actually achieves parallelism across cores?
Q3.Why does Python's `threading` module still help for I/O-bound tasks despite the GIL?
Q4.What is required for `asyncio` concurrency to actually overlap work?