9

将任务分配给其他线程处理,使用哪种方式更优

 3 years ago
source link: https://www.v2ex.com/t/792974
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

一个含有一千万字符串的集合,期望计算每个字符串的 md5 值。并打印出来,不考虑顺序。

这是一个 cpu 密集型操作,如果使用单线程做效率不高,在四核机器上准备开启四个线程做

将集合分成四个子集合,每个线程分配一个子集合,for 循环操作

使用 queue 存储字符串,每个线程从 queue 中获取取单个字符串,操作后再读取下一个。

想要验证的结果

如果当前有很多 cpu 密集型的小任务,使用多线程时,是每次获取一个(就像线程池读取任务执行那样),还是每次读取一批。哪种更好一点,还是说没有啥差别。

从线程切换,以及 java 中内存模型,对象引用 角度分析

下面这段话是从网上拷贝的,是不是说明方法一一次性传递多个任务到另一个线程更优呢,这样的话这两个线程之间同步的对象应该只有集合本身,而不包含集合内的对象吧???

JMM 模型下的线程间通信:
线程间通信必须要经过主内存。

如下,如果线程 A 与线程 B 之间要通信的话,必须要经历下面 2 个步骤:

1 )线程 A 把本地内存 A 中更新过的共享变量刷新到主内存中去。

2 )线程 B 到主内存中去读取线程 A 之前已更新过的共享变量。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK