一、从四个方面说什么是进程,线程:
1)调度:进程是系统资源分配的基本实体;线程是CPU调度的基本单位,线程是一个进程的内部资源,是linux中最小资源单位。
2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行。
3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源。
4)系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。
二、如何选择该用线程、还是该用进程
原则:安全稳定选进程,频繁快速选线程。
1)当需要频繁的创建和销毁时选择使用线程去分配任务,这样可以节约很多空间。
2)需要传送大量数据时,选择使用线程,因为多线程间切换速度快,不需要跨越边界。
3)并发执行任务的时候选择线程,线程是实现并行操作的一种手段,这样有利于多个线程去完成待完成的任务。
三、线程、进程的优缺点
1)多进程更健壮,一个进程死了不影响其他进程,子进程死了也不会影响到主进程,毕竟系统会给每个进程分配独立的系统资源。多线程比较脆弱,一个线程崩溃很可能影响到整个程序,因为多个线程是在一个进程里一起合作干活的。
2) 进程性能大于线程,每个进程独立地址空间和资源,而多个线程是一起共享了同个进程里的空间和资源,结果就很明显了,线程的性能上限一定比不上进程。但是创建多进程的系统花销却远大于创建多线程。
3)多进程通讯因为需要跨越进程边界,不适合大量数据的传送,更适合小数据或者密集数据的传送。而多线程无需跨越进程边界,适合各线程间大量数据的传送,甚至还有很重要的一点,多线程可以共享同一进程里的共享内存和变量哦。
4) 多进程逻辑控制比多线程复杂,需要与主进程做好交互。根据上面几点,我们不难知道多进程是“要用来做大事”的,而多线程是“各自做件小事,合作完成大事”。所以要做大事自然就需要更复杂的逻辑控制,不像做小事那么目标明显。
5)虽然多线程逻辑控制比较简单,但是却需要复杂的线程同步和加锁控制等机制。
6)最后的一点,可能比较少见,我们可以通过增加CPU的数量来增加进程的数量,但增加不了线程的数量,即增加CPU无法提高线程数量,线程数量由进程的空间资源和线程本身栈大小确定。