This document discusses threads in operating systems. It defines a thread as a flow of execution through a process's code, with its own program counter, registers and stack. Each thread belongs to a single process. The document compares processes and threads, noting that threads are lighter weight than processes and can share resources. It describes user-level threads, which are managed in userspace libraries, and kernel-level threads, which are managed by the operating system kernel. The advantages and disadvantages of each type are provided. Finally, it discusses different multi-threading models including many-to-one, one-to-one, and many-to-many.