How are python threads different from other languages? I understand GIL limits code exec to one thread but how does "usual" threading is like without GIL.
I have used many other languages but I've only touched concurrency in python. I have learnt about threading, asyncio and multiprocessing. 

I was reading about GIL and can easily understand "it limits code exec to one thread", that's plain definition. Its a mutex and all that.

But how exactly does it limits and what? So in languages without GIL like Java and C++ can each thread execute code without taking turns as in python? So if there are say 20 threads, all of those are executing code simultaneously?

So effectively in python threading CAN ONLY HELP I/O BOUND programs but in Java/C++ threading CAN HELP BOTH CPU BOUND AND I/O BOUND PROGRAMS?