Jul*_* A. 8 java multithreading
我有这句话来自Goetz的Java Concurrency In Practice:
由于上下文切换导致的线程运行时开销包括保存和恢复执行上下文,丢失局部性以及调度线程而不是运行它们所花费的CPU时间.
什么是"失去地方"?
当线程工作时,它通常从内存和磁盘读取数据.数据通常存储在内存/磁盘上的连续或关闭位置(例如,在迭代数组时,或在读取对象的字段时).硬件通过将内存块加载到快速缓存中来下注,以便更快地访问连续/关闭内存位置.
当你拥有大量线程并在它们之间切换时,通常需要刷新和重新加载这些缓存,这使得线程代码比一次执行所需的时间更长,而不必切换到其他线程然后回来
有点像我们人类在被打断后需要一些时间回到任务,找到我们在哪里,我们在做什么等等.