Before we discuss the GIL, we must understand the two main types of tasks your program might perform: I/O-Bound Tasks: These are tasks that spend most of their time waiting for something to happen.