1. 問題とリソースの関係
一部の問題では、リソースが多いほど解決が速くなります。注: すべてのプログラムにはシリアル部分が必要であり、合理的な分析により、シリアル部分と並列部分がプログラムに大きな影響を与えることが示されています。シリアル部分の割合とマルチコアの実行効率の間には指数関数的な関係があります。 2.ConcurrentLinkedQueue
マルチコア環境では、このスレッドセーフなキューは、synchronizedListによって生成されるキューよりもはるかに高速です
言えることは、コンカレントで提供されるクラスは、メソッドによって生成されるスレッドセーフなクラスよりも高速であるということです2. スレッドのオーバーヘッド マルチスレッドにはオーバーヘッドがあるため、マルチスレッドの使用はパフォーマンスの向上を保証する必要があります > 同時実行のオーバーヘッド コンテキスト切り替えのオーバーヘッド メモリ同期のオーバーヘッド 3. ロック競合の削減 1. ロック保持者の時間を減らす: ロックの範囲を減らす
private final Map<String, String> attributes = new HashMap<String, String>();//整个方法上锁public synchronized boolean userLocationMatches(String name, String regexp) { String key = "users." + name + ".location"; String location = attributes.get(key);if (location == null)return false;elsereturn Pattern.matches(regexp, location); }public boolean userLocationMatches(String name, String regexp) { String key = "users." + name + ".location"; String location;//只针对可变状态上锁synchronized (this) { location = attributes.get(key); }if (location == null)return false;elsereturn Pattern.matches(regexp, location); }
public class ServerStatusBeforeSplit {public final Set<String> users;public final Set<String> queries;public ServerStatusBeforeSplit() { users = new HashSet<String>(); queries = new HashSet<String>(); }//每个方法使用 当前class实例锁,类似于synchronized(this),不管是否是操作同一共享状态public synchronized void addUser(String u) { users.add(u); }public synchronized void addQuery(String q) { queries.add(q); }public synchronized void removeUser(String u) { users.remove(u); }public synchronized void removeQuery(String q) { queries.remove(q); } }public class ServerStatusAfterSplit {public final Set<String> users;public final Set<String> queries;//操作同一 状态的方法 使用相同的锁public ServerStatusAfterSplit() { users = new HashSet<String>(); queries = new HashSet<String>(); }public void addUser(String u) {synchronized (users) { users.add(u); } }public void addQuery(String q) {synchronized (queries) { queries.add(q); } }public void removeUser(String u) {synchronized (users) { users.remove(u); } }public void removeQuery(String q) {synchronized (users) { queries.remove(q); } } }
以上がJava 同時プログラミング (4) パフォーマンスとスケーラビリティの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。