对于操作系统教科书中是这样定义的;进程是程序执行的一个实例。它是资源配置的最小单位;而为了提高程序的并行性同时降低上下文切换的时间消耗,提出了线程的概念,一个进程中可以有多个线程,线程是程序执行的最小单位;
在Linux系统中,Linux内核有必要再区分一下这几个概念;
进程,从内核观点看,进程的目的就是担当分配系统资源(包括CPU时间、内存等)的实体;当一个进程创建时,它几乎与父进程相同。它接受父进程地址空间的一个(逻辑)拷贝,并从进程创建系统调用的下一条指令开始执行与父进程相同的代码。
对于线程,Linux系统中,分为内核线程和用户线程。其中,内核线程只运行在内核上,可以在全系统范围内竞争处理器资源;同时唯一使用的资源是内核栈和上下文切换时保持寄存器的空间; 而用户线程,则完全建立在用户空间,其创建、调用和销毁均在用户空间上实现,并不需要内核帮忙;
轻量级线程(LWP),是一种实现多任务的方法,Linux使用轻量级线程对多线程应用程序提供更好的支持。轻量级进程是内核线程的高度抽象,每一个轻量级进程都与一个特定的内核线程相关联;这里需要注意,由名字可知,轻量级进程与线程并不相同,同时它也有别于普通进程;
轻量级进程区别于普通进程在于它只有一个最小的执行上下文和调度程序所需的统计信息,这也是之所以成为轻量级的原因。一般来说,一个进程代表程序的一个实例,但LWP则代表程序执行的线程。(在内核不支持线程的时候,LWP可以很方便的提供线程的实现)
Linux所使用的线程库LinuxThreads是用户空间的线程库,采取的是线程-进程1对1模型,即一个用户线程对应一个轻量级进程,同时一个轻量级进程对应一个特定的内核线程。这样,将线程的调度等同于进程的调度,调度由内核完成,而线程的创建、同步、销毁则由核外线程库完成。