Threads provide a way to improve application performance through parallelism. A thread is a flow of execution through the process code, with its own program counter, system registers and stack. Threads are lighter weight than processes, allowing for concurrent execution on a single-core system and parallelism on multi-core systems. Threads within the same process can share resources like files and memory, while processes operate independently. The pthread functions create, join, and attribute threads, while semaphores provide mutual exclusion and synchronization between threads.