区别
1.进程是系统进行资源分配和调度的基本单位,是操作系统结构的基础,而线程是CPU调度的基本单元。
在执行一些细小任务时,本身无需分配单独资源时(多个任务共享同一组资源即可,比如所有子进程共享父进程的资源),进程的实现机制依然会繁琐的将资源分割,这样造成浪费,而且还消耗时间。后来就有了专门的多任务技术被创造出来——线程。线程的特点就是在不需要独立资源的情况下就可以运行。在多任务程序中,子进程(子线程)的调度一般与父进程(父线程)平等竞争。
2.进程的个体间是完全独立的,而线程间是彼此依存的。多进程环境中,任何一个进程的终止,不会影响到其他进程。而多线程环境中,父线程终止,全部子线程被迫终止(没有了资源)。而任何一个子线程终止一般不会影响其他线程,除非子线程执行了exit()系统调用。任何一个子线程执行exit(),全部线程同时灭亡。
在全系统中,进程ID是唯一标识,对于进程的管理都是通过PID来实现的。
3.进程的创建调用fork或者vfork,而线程的创建调用pthread_create,进程结束后它拥有的所有线程都将销毁,而线程的结束不会影响同个进程中的其他线程的结束。
实体间(进程间,线程间,进线程间)通信方式的不同
进程间的通信方式有这样几种:
A.共享内存 B.消息队列 C.信号量 D.管道 E.信号
F.文件 G.socket
线程间的通信方式上述进程间的方式都可沿用,且还有自己独特的几种:
A.互斥量 B.自旋锁 C.条件变量 D.读写锁 E.线程信号 G.全局变量