进程和线程都是由操作系统所体现的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。
一个程序至少有一个进程,一个进程至少有一个线程。
进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
进程是承担分配系统资源的实体,而线程是调度的基本单位。
线程是进程的一个实体,是CPU调度和分配的基本单位,是比进程小的能独立运行的基本单位,线程本身不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是线程与同属于一个进程的其他线程共享所拥有的全部资源。
一个线程可以创建和撤销另一个线程,同一个进程中的多个线程可以并发执行。
进程创建调用fork或vfork,而线程的创建调用pthread_create,进程结束后它所拥有的线程也会被销毁。
进程和线程的主要区别在于它们属于不同的操作系统资源管理的方式。进程具有独立性,有自己独立的地址空间,一个进程崩溃后,在保护模式下不会对其他进程产生影响。
而线程只是一个进程中的不同执行路径。线程有自己独立的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程挂掉其他进程都挂掉。因此,多进程会比多线程的程序健壮,但是在程序切换时,耗费资源较大,效率差一些。但对于一些要求同时进行,但又需要共享某些变量的并发操作,只能用用线程,不能用进程。