进程和线程之间有什么区别
10 分钟阅读
•
1669 字
+
722 词
进程线程协程区别,什么场景使用协程
- 从 内存 上来说,每个 进程都有自己独立的地址空间 ,创建和销毁的开销比较大,并且 进程间切换需要保存和恢复整个进程的状态 ,进程之间的切换还要 切换页表 , 频繁切换页表还会使得TLB缓存命中率下降 ,所以上下文切换开销比较高。而 线程共享相同的内存空间,只有自己的栈,程序计数器,方法栈 ,创建销毁开销比较小。由于 线程独占的资源比较少 所以上下文切换开销比较少。
- 从 通信 上来说,进程之间相互隔离,所以 进程之间的通信 需要使用一些 特殊机制IPC ,比如管道,消息队列,共享内存等。而线程是共享相同的堆内存空间的,所以可以直接访问共享数据。
- 从 安全性 上来说,一个进程的崩溃不会直接影响到其他进程的稳定性。而线程是共享相同的内存空间,一个线程的错误可能会影响整个进程的稳定性。
参考答案:
- 进程:由于每个进程都有独立的内存空间,创建和销毁进程的开销较大。进程间切换需要保存和恢复整个进程的状态,因此上下文切换的开销较高。
- 线程:线程共享相同的内存空间,创建和销毁线程的开销较小。线程间切换只需要保存和恢复少量的线程上下文,因此上下文切换的开销较小。
- 进程:由于进程间相互隔离,进程之间的通信需要使用一些特殊机制,如管道、消息队列、共享内存等。
- 线程:由于线程共享相同的内存空间,它们之间可以直接访问共享数据,线程间通信更加方便。
- 进程:由于进程间相互隔离,一个进程的崩溃不会直接影响其他进程的稳定性。
- 线程:由于线程共享相同的内存空间,一个线程的错误可能会影响整个进程的稳定性。
- 线程的创建时间⽐进程快,因为进程在创建的过程中,还需要资源管理信息,⽐如内存管理信息、⽂件管理信息,⽽线程在创建的过程中,不会涉及这些资源管理信息,⽽是共享它们;
- 线程的终⽌时间⽐进程快,因为线程释放的资源相⽐进程少很多;
- 同⼀个进程内的线程切换⽐进程切换快,因为 线程具有相同的地址空间(虚拟内存共享) ,这意味着 同⼀个进程的线程都具有同⼀个⻚表 ,那么在 切换的时候不需要切换⻚表 。⽽ 对于进程之间的切换,切换的时候要把⻚表给切换掉,⽽⻚表的切换过程开销是⽐较⼤的;
- 由于同⼀进程的各线程间共享内存和⽂件资源,那么在线程之间数据传递的时候,就不需要经过内核了,这就使得线程之间的数据交互效率更⾼了;