Thread Per Task Type Another threading model involves having different threads responsible for different types of tasks. For example, in a GUI program, we can have one thread responsible for handling the GUI's screen updates (i.e. actually talking to the X server) while any other thread which wishes to perform a screen update, sends a request to the GUI thread to perform the operation on its behalf. This type of programming also makes sense when we need to use a library that is not thread-safe. We could have one thread that uses this library, and the other threads sending this thread requests to perform various operations using this library.