在并发方法中,我们要保证一致性和准确性,但是有希望在给定的硬件条件下达到最佳性能.
当我们完全使用了不可变共享变量模型,那么我们将很容易地规避竞争条件或者一致性的问题.因为当线程不再竞争访问可变数据的时候,程序就无需考虑变量在多个线程之间的可见性问题和穿越内存栅栏的问题,同时,我们也不许担心如何控制线程的执行序列.
所以我们应当尽可能提供共享不可变性!!!否则就应该遵循你隔离可变性原则,也就是只有一个线程可以访问可变变量.
那么我们在拆分任务时,设计poolsize和tasks是需要考虑的,具体多少参见:求解大型素数的问题
首先我们要将任务拆分为更小的,可以并发的子任务.如果任务是IO密集型或者有关键的IO操作,那么开多个线程将有助于提高性能,在这种情况下,线程数应该远远大于cpu核心数,具体多少 使用 线程数=cpu可用核心数/(1-阻塞系数),阻塞系数在0-1 来计算.
对于计算密集型,poolsize和tasks的大小是需要考虑的,如果问题可以被拆分成多个子任务,那么程序少开和处理器那么多个线程,对程序是大有助益的.同时我们要注意少量线程执行多个任务的时候的均衡负载问题.