嵌入式面经:一文搞懂线程进程的常见问题
嵌入式面经:一文搞懂线程进程的常见问题
1、什么是进程和线程?
进程:进程是资源分配的基本单位,它是程序执行时的一个实例,在程序运行时创建,每个进程都有独立的。
- 个任务就是一个进程(Process),比如打开一个浏览器就是启动一个浏览器进程,打开一个记事本就启动了一个记事本进程,打开两个记事本就启动了两个记事本进程,打开一个Word就启动了一个Word进程。
线程:线程是程序执行的最小单位,是进程的一个执行流,一个进程由多个线程组成的,他们共享资源,同一个进程内的线程共享进程的地址空间,每个线程都有自己独立的运行栈和程序计数器。
- 在一个进程类,比如Word,它可以同时进行打字、拼写检查、打印等事情。在一个进程内部,要同时干多件事,就需要同时运行多个“子任务”,我们把进程内的这些“子任务”称为线程(Thread)
- 共享资源需要考虑:多个任务需要防止资源冲突,所以需要通过一些线程同步机制方式来防止多个线程访问共享资源产生冲突,比如互斥锁、信号量、条件变量、读写锁等。
2、进程和线程区别?
先说结论:
特性 | 进程(Process) | 线程(Thread) |
---|---|---|
独立性 | 独立的地址空间和资源 | 共享进程的地址空间和资源 |
创建开销 | 大,因为操作系统需要为进程分配独立的资源和内存 | 小,因为线程共享进程的资源,切换上下文的开销也较小。 |
通信 | 复杂(需IPC机制) | 简单(共享内存) |
稳定性 | 高(进程之间相互独立,一个进程崩溃不会直接影响其他进程崩溃) | 低(线程之间相互依赖,一个线程的崩溃可能导致整个进程崩溃) |
同步 | 简单(进程间无共享数据) | 复杂(需同步机制) |
进程适用于需要独立执行且资源隔离的任务,而线程则适用于需要高并发和资源共享的任务。根据具体应用场景选择合适的并发执行单元可以提高系统的性能和稳定性。
3、何时使用多进程、多线程?
- 对资源的管理和保护要求高,