On Linux, there is very little distinction between processes and threads. (Assuming you're using the standard POSIX threads implementation, which you probably are.) They are represented by the same data structure in the kernel (the task_struct), hence they are treated the same by the system. Their context switch overhead is the same. The only real difference is that processes get their own address space, which will incur a higher cost at creation time.
If you're talking about threads implemented by a language runtime (which may execute its own concept of threads on top of kernel threads), then the above may not apply. And on Windows, I understand that there is a real difference between threads and processes, although I have no systems programming experience with it.