Multi Threading - Cooperative multitasking vs Preemptive multitasking?