Вопрос возникает после прочтения this one. В чем разница между синхронизированными и несинхронизированными объектами? Почему Unsynchronized Objects работают лучше, чем Synchronized?Почему несинхронизированные объекты работают лучше, чем синхронизированные?
ответ
В чем разница между синхронизированными и несинхронизированными объектами? Почему Unsynchronized Objects работают лучше, чем Synchronized?
HashTable
считается синхронизированы, поскольку его методы помечены как synchronized
. Всякий раз, когда нить входит в метод synchronized
или блок synchronized
, он должен сначала получить эксклюзивный контроль над монитором, связанным с синхронизируемым экземпляром объекта. Если другой поток уже находится в блоке synchronized
на одном и том же объекте, тогда это приведет к блокировке потока, который является штрафом за производительность, как упомянули другие.
Однако блок synchronized
также выполняет синхронизацию памяти до и после которой имеет последствия кэша памяти, а также ограничивает переупорядочение/оптимизацию кода, которые имеют значительные последствия для производительности. Поэтому, даже если у вас есть один поток, вызывающий ввод в блок synchronized
(т. Е. Без блокировки), он будет работать медленнее, чем ни один.
Одно из реальных улучшений производительности с помощью потоковых программ реализовано из-за отдельных высокоскоростных кэшей памяти процессора. Когда потоковая программа выполняет синхронизацию памяти, блоки памяти кэша, которые были обновлены, должны быть записаны в основную память, и любые обновления, сделанные в основной памяти, будут недействительными для локальной кэшированной памяти.Синхронизируя больше, снова даже в одной программе с резьбой, вы увидите поражение в производительности.
В качестве альтернативы, HashTable
- это более старый класс. Если вам нужен реентер Map
, то следует использовать ConcurrentHashMap
.
Популярный говорящий синхронный объект - это модель одного потока, если есть 2 потока, которые хотят изменить синхронизированный объект. если первый получает блокировку объекта, последний должен быть waite.but, если объект несинхронизирован, они могут работать с объектом одновременно, поэтому причина, по которой Unsynchronized является небезопасной.
Для синхронизации с работой JVM должен предотвращать одновременную передачу нескольких потоков одним синхронизируемым блоком. Для этого требуется дополнительная обработка, чем если бы не было синхронизированного блока, добавляя дополнительную нагрузку на JVM и, следовательно, уменьшая производительность.
Точные механизмы блокировки в игре, когда синхронизация происходит которые объясняют в How the Java virtual machine performs thread synchronization
Синхронизация полезна, поскольку она позволяет предотвратить код от того бежать в два раза, в то же время (обычно называемый параллелизм). Это важно в многопоточной среде по множеству причин. Чтобы обеспечить эту гарантию, JVM должна выполнить дополнительную работу, что означает, что производительность снижается. Поскольку для синхронизации требуется, чтобы одновременно выполнялся только один процесс, это может привести к тому, что многопоточные программы будут работать медленно (или медленнее!), Чем однопоточные программы.
Важно отметить, что величина снижения производительности не всегда очевидна. В зависимости от обстоятельств уменьшение может быть крошечным или огромным. Это зависит от всех видов вещей.
Наконец, я хотел бы добавить короткое предупреждение: одновременное программирование с использованием синхронизации - hard. Я обнаружил, что обычно другие элементы управления параллелизмом лучше подходят для моих потребностей. Один из моих фаворитов - Atomic Reference. Эта утилита великолепна, потому что она очень ограничивает количество синхронизированного кода. Это упрощает чтение, поддержку и запись.
Синхронизация:
Список Массив несинхронизированная, что означает несколько потоков могут работать в список массива одновременно. Напр. если один поток выполняет операцию добавить в список массива, может быть другой поток выполнения удалить операцию на список массива одновременно в нескольких резьбовым среде
в то время как вектор синхронизируется. Это означает, что если один поток работает с Vector, ни одна другая нить не может его удержать. В отличие от Array List, только один поток может выполнять операцию по вектору за раз.
Производительность:
синхронные операции потребляет больше времени по сравнению с несинхронизированных из них, так что если нет необходимости в потокобезопасную операции, список Массива является лучшим выбором, поскольку производительность будет улучшен из-за одновременных процессов.
- 1. Почему Синглтон лучше, чем глобальные объекты
- 2. Синхронизированные и несинхронизированные авторы в HashMap - результаты не так ожидаются
- 3. Как работают синхронизированные списки?
- 4. Почему `` `` лучше, чем `подмножество`?
- 5. Почему Path.Combine лучше, чем «\\»?
- 6. Синхронизированные потоки не работают правильно
- 7. Почему объекты функции лучше, чем указатели на функции?
- 8. Синхронизированные объекты блока и монитора
- 9. Почему соединение лучше, чем подзапрос?
- 10. Почему str.format() лучше, чем str()?
- 11. Почему Enum.GetValues лучше, чем итерация?
- 12. Почему poll() лучше, чем select()?
- 13. Почему LRU лучше, чем FIFO?
- 14. Почему ENUM лучше, чем INT
- 15. Как сохранить объекты, синхронизированные между клиентами.
- 16. Угловые объекты хранения, синхронизированные с помощью приложения
- 17. Почему операции CAS (Atomic) быстрее, чем синхронизированные или изменчивые операции
- 18. Как синхронизированные статические методы работают в Java?
- 19. Синхронизированные объекты, получаемые из несинхронизированных методов
- 20. Я пытаюсь лучше понять, как работают объекты в Python
- 21. LINQ GroupBy используя анонимные типы работают лучше, чем это должно
- 22. Объекты, созданные динамически, Почему они работают?
- 23. Почему NoSQL лучше «масштабируется», чем РСУБД?
- 24. Excel VBA: Почему API лучше, чем SendKeys?
- 25. Почему FileChannel работает лучше, чем MemoryMappedBuffer?
- 26. Почему ChromeDriver работает намного лучше, чем PhantomJSDriver
- 27. Почему производительность comb7 лучше, чем comb5?
- 28. Почему 4 процесса лучше, чем 4 потока?
- 29. Почему третий вариант лучше, чем регулярное выражение?
- 30. Почему интеграция Верле лучше, чем интеграция Эйлера?
только один поток может одновременно использовать синхронизированный объект, таким образом, другие потоки должны ждать .. – ogzd
плюс есть затраты, связанные с запорным механизмом, так что даже с одним потоком это медленнее, если синхронизация происходит. –