虽然不明白这个问题有什么好问的但是面试总会被问到。以下仅仅是我个人的理解
进程是计算机分配资源的最小单位,线程是CPU调度的最小单位。
它们的存在都是为了更好的利用计算机资源。
一个进程的多个线程是共享内存区域的。进程之间是独立的。线程有自己独立的栈和局部变量,但线程之间没有独立的地址空间
切换进程的代价远比切换线程要高。进程通信的代价远比线程通信要高。
在当下,进程是一个或一组线程的容器。我们通常都在编写多线程的程序,很少设计到多进程。
知乎有个说法
- 单进程单线程:一个人在一个桌子上吃菜。
- 单进程多线程:多个人在同一个桌子上一起吃菜。
- 多进程单线程:多个人每个人在自己的桌子上吃菜。
简单比较:
- 数据共享性:多进程共享依赖复杂的进程间通信;多线程数据共享因共享进程数据而十分简单。
- 数据同步:多进程数据分开,同步简单;多线程数据同步复杂。
- 资源消耗:多进程占用CPU,内存多;多线程占用CPU,内存小。
- 创建销毁切换:多进程复杂;多线程简单。
- 编程:多进程简单;多线程复杂。
- 可靠性:多进程不进行进程间通信的话,进程间不会互相影响;多线程一个线程挂掉将导致整个进程挂掉。
- 分布式:多进程适合多机分布式,扩展方便;多线程适合多核分布式。
网友评论