面试中常见问题
- 线程与进程的区别
解答
- 参考Java并发编程实战,从并发历史的角度进行解读。
最初计算机是单任务的,程序拥有计算机所有资源。
为了能够实现多任务,可以让不同的程序在不同的进程中进行,操作系统为每个进程分配独立的资源:内存,文件句柄等。进程之间的通信依靠:套接字,信号处理器,共享内存,信号量及文件等粗粒度的方式进行。
线程可以看做更细粒度的进程,一个进程可以启动多个线程,多个线程共享这个进程的资源:内存,文件句柄等,每个线程维护独立的程序计数器,栈,局部变量等。由于一个进程的多个线程共享进程的内存空间,因此多个线程能访问同一变量,并在同一堆上分配对象,这使得线程之间的通信更加简单,同时由于共享内存的存在也使得多线程需要同步机制来确保安全性。
所以对于需要进行大量通信的场景适合多线程来提高效率,而只需要少量通信的情况适合使用多进程来提高安全性。