什么是进程?什么是线程?这种问题经常被问到,做下整理总结。
进程是指在系统中正在运行的一个应用程序,可以认为是程序执行时的一个实例,而且每个进程拥有独立的地址空间(栈空间)。一个进程无法直接访问另一个进程的变量和数据结构, 如果希望让一个进程访问另一个进程的资源,需要使用进程间通信,比如:管道,文件, 套接字等。
线程是进程的一个实体,是进程的一条执行路径。一个进程可以拥有多个线程,每个线程使用其所属进程的栈空间。 线程与进程的一个主要区别是,同一进程内的多个线程会共享部分状态, 多个线程可以读写同一块内存(一个进程无法直接访问另一进程的内存)。同时, 每个线程还拥有自己的寄存器和栈,其它线程可以读写这些栈内存。
总的来说,进程——资源分配的最小单位,线程——程序执行的最小单位。
线程进程的区别只要体现在几个方面: 1.因为进程拥有独立的堆栈空间和数据段,所以每当启动一个新的进程必须分配给他独立的地址空间,建立众多的数据表来维护他的代码段、堆栈段和数据段,对于进程来说十分“奢侈”,而线程则不需要; 2.进程间互不干扰,相互独立,进程的通信机制相对复杂,如管道、信号量、共享内存、消息队列套接字等通信机制,而线程则相对简单; 3.属于同一个进程的所有线程共享该进程的所有资源,包括文件描述符;而不同的是进程不仅共享正文段,还共享文件描述符; 4.线程又称为轻量级进程,进程有进程控制块,线程有线程控制块; 5.线程必定也只能属于一个进程,而进程可以拥有多个线程; 6.在程序结构上,使用进程比使用线程处理程序更复杂,使得程序结构更加繁琐;
进程与线程的选择取决以下几点:
1.需要频繁创建销毁的优先使用线程;因为对进程来说创建和销毁一个进程代价是很大的。
2.线程的切换速度快,所以在需要大量计算,切换频繁时用线程,还有耗时的操作使用线程可提高应用程序的响应
3.因为对CPU系统的效率使用上线程更占优,所以可能要发展到多机分布的用进程,多核分布用线程;
4.并行操作时使用线程,如C/S架构的服务器端并发线程响应用户的请求;
5.需要更稳定安全时,适合选择进程;需要速度时,选择线程更好。