Есть ли способ увеличить производительность метода Thread.start. поскольку я знаю, что Thread.start вызовет метод прогона протектора в отдельном потоке, но я обнаружил, что ему нужно больше времени, чем просто вызов метода в вызывающем контексте.увеличить Производительность начала потока в java
ответ
Начальные потоки определенно связаны с накладными расходами. Возможно, вы захотите рассмотреть пул потоков.
http://docs.oracle.com/javase/tutorial/essential/concurrency/pools.html
Thread.start
является родным. Это намного больше, чем вызов run
- он использует вызовы операционной системы для создания стека потоков и множества других вещей. Рассмотрите возможность использования Thread Pool
.
Начальные потоки, переключение контекста и уничтожение потоков требуют дорогостоящих циклов процессора. Поэтому лучше всего использовать Пул потоков, который соответствует вашим требованиям.
Есть различные варианты:
Сохраненная бассейн Thread - кэширует некоторые темы для повышения производительности
один пул Thread исполнителя - Один поток исполнителя
- Fixed Thread Pool исполнителя - Исполнитель с фиксированным размером
Переключение может быть красным путем создания n потоков на основе вашей конфигурации оборудования и других параметров.
Преимущество исполнителей над Thread.start()
:
- использование Re существующих потоков, поэтому потоки не создаются каждый раз, когда задача представленного управление
- Thread осуществляется исполнителями создания
http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/Executors.html –
Thread всегда требуется время. Традиционный подход
new Thread(runnableObj).start();
создает новую темы каждый раз мы называем старта() метода.
Используйте Исполнители, если вы не хотите тратить дополнительное время на создание потоков во время выполнения вашей бизнес-логики. Вы можете настроить и создать пулы потоков при запуске приложения.
Here хороший краткий учебник для Executors
- 1. Время начала Java-потока
- 2. Как увеличить производительность двусвязного списка в java?
- 3. Как увеличить производительность данных?
- 4. Как увеличить производительность?
- 5. Как увеличить производительность приложения?
- 6. Как увеличить производительность paramiko
- 7. увеличить производительность веб-сайта?
- 8. Как увеличить производительность игры?
- 9. Как увеличить производительность в fabric.Image.fromURL
- 10. Как увеличить производительность в LWJGL?
- 11. Как увеличить производительность команды cmd в окне
- 12. Можем ли мы увеличить приоритет потока коллекции мусора в java
- 13. Как увеличить производительность Infragistics igTreeGrid
- 14. Как увеличить производительность запроса gae?
- 15. Как увеличить производительность пула IIS?
- 16. Как увеличить производительность MySQL INSERT?
- 17. Как увеличить производительность этой функции
- 18. Производительность запуска Java Java
- 19. Как увеличить производительность суммирования столбца
- 20. Как увеличить производительность хранимой процедуры
- 21. мне нужно увеличить производительность запроса
- 22. Передача параметра внутри начала потока
- 23. Как увеличить производительность цикла foreach
- 24. Как увеличить производительность Spark DataFrame
- 25. Как увеличить производительность вставки контактов?
- 26. Производительность Maven в приложениях Java
- 27. Java Что происходит при запуске потока до начала работы
- 28. Задержка начала потока в C++ 11
- 29. Как увеличить производительность IF Statement в C++
- 30. Как увеличить производительность R в машинном обучении?
Уменьшения размера стека потока может дать некоторое небольшое улучшение ... – Affe
Сделать Thread.start ненужного либо с использованием пула потоков, как это было предложено @pamphet и т.д., или сигнализируя выделенный поток, который запускает цикл вокруг некоторого wait(), например. Очередь P-C. –
поблагодарить всех пул потоков улучшил производительность 7x –