日期:2014-05-18  浏览次数:21004 次

请问,在《CLR via c#》关于线程的介绍,里面有“计算限制”一词,是什么意思呢?
如:
“使用专用线程来异步执行计算限制的操作”...
“作为代替,你应该尽量使用CLR线程池来异步执行计算限制的操作”....
“然而,有一些情况你可能需要明确创建线程来执行一个特殊的计算限制的操作。”
“受计算限制的任务需要时间非常长;这样,我不会让线程池负担逻辑,因为它试图找出是否需要创建一个额外的线程。”

这个所谓的“计算限制”,能理解为要执行的方法吗?


------解决方案--------------------
没听说过。估计是翻译的问题。
------解决方案--------------------
已经写了 就是需要长时间计算的线程
线程池是提供给那些需要频繁创建的线程 因为创建线程的开销很大 需要上下文切换等等 如果一个线程使用了很少时间就被销毁那么就不值得 我们把他放回线程池里面以备下次使用
而对于长时间计算的线程 相对他的创建和上下文切换开销 他的计算时间要多得多 那么我们就没必要把他放到线程池里面去 因为线程池管理这些线程也是需要资源的
------解决方案--------------------
其实还有一个就是缓存预热 如果是长计算时间的线程 那么在经过一段时间的运行后他的L1 L2命中就会提高 进而加速执行速度 毕竟L1只有一个CPU时钟周期的速度 但是去内存的话要10个时钟周期 如果这个时候进行线程切换 那么这些已经预热了的缓存就没用了 下次再换回这个线程的时候又要重新预热缓存了 这就降低了执行速度
探讨

引用:

已经写了 就是需要长时间计算的线程
线程池是提供给那些需要频繁创建的线程 因为创建线程的开销很大 需要上下文切换等等 如果一个线程使用了很少时间就被销毁那么就不值得 我们把他放回线程池里面以备下次使用
而对于长时间计算的线程 相对他的创建和上下文切换开销 他的计算时间要多得多 那么我们就没必要把他放到线程池里面去 因为线程池管理这些线程也是需要资源的

嗯……

------解决方案--------------------
线程,对CPU 来说,好像是一个独立的要马上处理的任务吧,它要占用当前CPU的一些时间片,和堆栈。
  从你引用的那几句来看, 真的很费劲地也不能理解---当然是指我自已

一般说来,对于要同步的事,我一般都是new Thread(functionName) 然后让它run 就算了,
  
其实计算机也是 一个一个方法的执行的,----写过汇编的你就知,
线程是高级语言的才引来的东西,
你也知道 计算机有中断系统。
让一些方法 CPU只执行一部分,中断,再执行另一些方法就是线程了。
----于底级语言来说叫中断,是要压栈(push)和出栈(pop)的.-----(要浪费时间的)
------解决方案--------------------
探讨

其实计算机也是 一个一个方法的执行的

------解决方案--------------------
你肯定知道CPU有一级缓存 二级缓存 一级缓存的速度大概在一个CPU时钟周期 二级缓存大概3-4个时钟周期
缓存是一个用小地址空间映射大地址空间的结构 在同一时间他可以载入一段地址空间的数据到缓存 一个程序运行一段时间之后缓存里面肯定保留了大部分他的数据 也就是说缓存命中率提高了 但是如果一进行线程调度 那么这些缓存就没用了
其实这些都有些掉书袋子 而且这个因素我自己都不知道占得比重有多大 换句话说 线程切换导致的缓存失效肯定是有的 但是造成的损失多大我估计不出来 
探讨

预热缓存??