正如我们所知,线程属于同一进程,为自己使用相同的共享地址空间同时运行,这是否意味着线程间同时共享内存空间,如果是,那么该怎么做?为什么我们需要上下文切换,如果他们都能够同时使用内存空间?多线程相同的地址空间
1
A
回答
0
每个线程都有自己的堆栈和可执行文件中的一个地方。
上下文切换是处理器获取正确的指令,该线程与正确的堆栈和值寄存器
2
为什么我们需要上下文切换,如果他们都能够同时使用 内存空间?
线程上下文切换是关于CPU时间而不是内存映射。想象一下,你有两个同样重要的工作者线程为了两个线程完成他们的工作,他们必须公平地从调度器接收CPU时间。这就是为什么你需要线程上下文切换。事实上,他们在同一进程内工作,使得这个上下文切换比进程上下文切换更轻,但是线程上下文切换是必要的。在线程上下文切换期间,虚拟内存空间保持不变,但IP(指令指针),SP(堆栈指针),通用寄存器等寄存器会因为其他“执行者”获取CPU时间而重新加载。
你的问题的其他部分已经在这个堆栈溢出线程中得到了解答。
线程切换和处理开关之间的主要区别是 ,一个线程切换期间,虚拟内存空间保持 相同的,而它的处理切换期间没有。这两种类型都涉及 将控制交给操作系统内核执行 上下文切换。切换进出操作系统内核 的过程以及切换寄存器的成本是执行上下文切换的最大的固定成本。
更模糊的成本是上下文切换混淆缓存机制的处理器。基本上,当你进行上下文切换时,处理器在其缓存 中“记住”的所有内存地址实际上变得毫无用处。这里最重要的一点是当 您更改虚拟内存空间时,处理器的后备缓冲区(TLB)或等效缓冲区会被刷新,因此内存访问会花费很多时间。这在 期间不会发生线程切换。
相关问题
- 1. 多线程虚拟地址空间?
- 2. 线程在别人的地址空间
- 3. 多线程Linux进程的地址空间布局
- 4. 线程返回到坏空间地址
- 5. “过程映像”和“过程的地址空间”是否是相同的概念?
- 6. 虚拟和物理地址空间是相同的
- 7. 多个设备的相同IP地址?
- 8. 多个网址相同目的地
- 9. 可达性vs地址空间vs地址总线
- 10. 当程序具有相同的虚拟地址空间时,情况如何
- 11. 进程的内存地址空间
- 12. 什么是进程的地址空间?
- 13. PThreads地址空间
- 14. Linux进程虚拟地址空间的地址范围
- 15. 虚拟地址系统上的进程地址空间
- 16. 在与Firefox不同的地址空间中运行小程序
- 17. 空间相同
- 18. 线程环境块如何在地址空间限制之上?
- 19. 多线程,线程间通信,同步
- 20. Linux中的全局或本地线性地址空间?
- 21. ARM linux:进程地址空间
- 22. cudaMalloc在不同的CPU线程上返回相同的内存地址
- 23. 路由表中有两个地址目的地址相同的线路
- 24. 多线程BlockingCollection相同的值
- 25. 多个线程持有相同的锁?
- 26. 多线程调用相同的函数
- 27. C++多线程代码执行在相同的时间单线程
- 28. 系统DLLs地址空间
- 29. Internet Explorer地址空间
- 30. 虚拟地址空间
谢谢您的回答,但我想澄清一下,如果上下文切换是所有关于CPU的时间,然后线程必须使用它接二连三按照它们的优先级,这表明即使内存空间不能同时使用,因为我们可能有许多线程同时处于运行状态,但由于分配给它们的CPU时间,仍然会在别人之前执行。因此,为什么我们说线程正在同时运行。 – Manish
我们说线程是同时运行的,因为它们可以同时运行,但并不是所有线程都一次运行。一个CPU内核可以一次运行一个线程。如果你有一个双核CPU,那么两个线程可以同时运行。所以如果我们有一个带有三个线程的程序,那么必须有一个上下文切换来运行第三个线程。 – shf301