You're telling me those applications use non-preemptive threading systems? I highly doubt that. They might be select()-based or polling, but that doesn't make them multi-threaded just because they handle multiple tasks simultaneously.
Let's not play semantic games here - threads and tasks are not the same things!