Что такое "false sharing" в многопоточном Java-приложении и как его можно избежать?
Ответ⬇️ "False sharing" — это ситуация, когда несколько потоков обновляют разные переменные, находящиеся в одном кэше процессора. Это приводит к снижению производительности из-за необходимости синхронизации кэшей. Чтобы избежать "false sharing", можно использовать аннотацию @Contended (с включенной опцией JVM) или добавлять дополнительные поля для выравнивания.
🗣 Пример:
public class Main { private static class Counter { // Добавляем дополнительные поля для выравнивания private long p1, p2, p3, p4, p5, p6, p7; public volatile long count = 0; private long q1, q2, q3, q4, q5, q6, q7; }
public static void main(String[] args) throws InterruptedException { Counter counter = new Counter(); Thread thread1 = new Thread(() -> { for (int i = 0; i < 1_000_000; i++) { counter.count++; } });
Thread thread2 = new Thread(() -> { for (int i = 0; i < 1_000_000; i++) { counter.count++; } });
Что такое "false sharing" в многопоточном Java-приложении и как его можно избежать?
Ответ⬇️ "False sharing" — это ситуация, когда несколько потоков обновляют разные переменные, находящиеся в одном кэше процессора. Это приводит к снижению производительности из-за необходимости синхронизации кэшей. Чтобы избежать "false sharing", можно использовать аннотацию @Contended (с включенной опцией JVM) или добавлять дополнительные поля для выравнивания.
🗣 Пример:
public class Main { private static class Counter { // Добавляем дополнительные поля для выравнивания private long p1, p2, p3, p4, p5, p6, p7; public volatile long count = 0; private long q1, q2, q3, q4, q5, q6, q7; }
public static void main(String[] args) throws InterruptedException { Counter counter = new Counter(); Thread thread1 = new Thread(() -> { for (int i = 0; i < 1_000_000; i++) { counter.count++; } });
Thread thread2 = new Thread(() -> { for (int i = 0; i < 1_000_000; i++) { counter.count++; } });
The campaign, which security firm Check Point has named Rampant Kitten, comprises two main components, one for Windows and the other for Android. Rampant Kitten’s objective is to steal Telegram messages, passwords, and two-factor authentication codes sent by SMS and then also take screenshots and record sounds within earshot of an infected phone, the researchers said in a post published on Friday.
How to Invest in Bitcoin?
Like a stock, you can buy and hold Bitcoin as an investment. You can even now do so in special retirement accounts called Bitcoin IRAs. No matter where you choose to hold your Bitcoin, people’s philosophies on how to invest it vary: Some buy and hold long term, some buy and aim to sell after a price rally, and others bet on its price decreasing. Bitcoin’s price over time has experienced big price swings, going as low as $5,165 and as high as $28,990 in 2020 alone. “I think in some places, people might be using Bitcoin to pay for things, but the truth is that it’s an asset that looks like it’s going to be increasing in value relatively quickly for some time,” Marquez says. “So why would you sell something that’s going to be worth so much more next year than it is today? The majority of people that hold it are long-term investors.”