进程和线程的一些概念、优缺点以及使用场景

什么是进程什么是线程?

进程是资源(cpu、内存等)分配的最小单位,线程是cpu调度和分配的基本单位,也就是程序执行的基本单位。

彼此之间有什么区别和联系?

线程是进程的一部分,同一进程里的线程共享本进程的地址空间和资源,而进程之间的地址空间和资源是互相独立的。以main()函数为例,我可以认为main()函数既是一个进程又是一个线程。作为线程,main()函数是程序的入口,也就是程序的主线程;作为进程,main()函数能够创建多个子线程,每个线程有自己的堆栈空间和局部变量,但又共享同一进程下的所有共享资源。 

多线程和多进程的优缺点?

(1) 多进程更健壮:大部分情况下,一个进程的死亡不会影响到其他进程,因为系统会给每个进程分配独立的地址空间和资源(但如果多个进程同时访问一个资源时,其中的某个进程发生了内存泄露,这个时候就会影响到其他进程);多线程比较脆弱:由于是多个线程一起在一个进程下合作完成一个或多个功能,如果一个线程发生崩溃,就很有可能影响到其他线程,进而影响到整个程序。

(2)多进程的性能比多线程好得多,这也是因为每个进程拥有系统分配的独立地址空间和资源,而多个线程是共享同一进程下的地址空间和资源。

(3)但同样因为进程拥有独立的地址空间和资源,所以创建多进程的开销远大于多线程。

(4)在通讯效率上,由于多进程之间传输数据需要跨越进程边界,所以不适合大量数据的传输,适合少量数据或者密集数据的传输;而多线程之间传输数据不需要跨越进程边界,所以适合大量数据的传输。

什么时候使用线程,什么时候使用进程?

(1)由于进程的性能远比线程好,所以当需要保障安全稳定时,选用进程。

(2)由于创建和销毁进程的开销大,所以当需要频繁使用创建和销毁操作时,选用线程。

(3)由于多线程之间切换速度快,且不需要跨越进程边界,所以当需要传输大量数据时,选用线程。 

你可能感兴趣的:(我的实习准备日记,java,linux,jvm)