面试题答案
一键面试资源占用
- 多线程:线程共享进程资源,如内存空间、文件描述符等,每个线程只需额外的栈空间,资源占用相对少。创建和销毁开销小,上下文切换开销也小,因为只需切换栈和寄存器等少量数据。
- 多进程:每个进程有独立的地址空间和资源,包括代码段、数据段、堆、栈等,资源占用大。创建和销毁开销大,上下文切换开销大,需切换内存映射、文件描述符表等大量资源。
通信方式
- 多线程:通信方便,可直接访问共享内存,但需注意同步问题,防止数据竞争,常用同步机制如互斥锁、条件变量、信号量等。
- 多进程:进程间相互独立,通信需借助特定的进程间通信(IPC)机制,如管道(包括无名管道和命名管道)、消息队列、共享内存、信号量、套接字等。其中共享内存是最快的IPC方式,但也需同步机制防止数据竞争。
数据共享
- 多线程:天然支持数据共享,同一进程内线程可直接访问进程数据,但多线程同时访问共享数据易引发数据不一致问题,需同步手段保证数据一致性。
- 多进程:数据独立,默认不共享。若要共享数据,需采用共享内存等IPC机制,并搭配同步工具确保数据安全访问。
性能表现
- 多线程:适合I/O密集型任务,因I/O操作时线程可释放CPU,其他线程继续执行。上下文切换开销小,能有效利用多核CPU部分资源。但线程数量过多时,频繁上下文切换和同步开销会降低性能。
- 多进程:适合CPU密集型任务,每个进程可充分利用一个CPU核心,避免多线程因全局解释器锁(GIL,如Python语言环境下)导致无法利用多核优势。进程独立,一个进程崩溃不影响其他进程,但进程间通信和资源管理开销大,限制了进程数量,过多进程会导致系统资源耗尽,性能下降。