Exploring the behavior of Python’s Global Interpreter Lock (GIL) using perf and VizTracer