Недавно я работал над развертыванием параллельных объектов на многоядерных процессорах. В примере я использую BlockingQueue.take()
метод, в спецификации которого упоминается, что он блокирует. Это означает, что метод не освобождает ресурсы окружающего потока, чтобы их можно было повторно использовать для других параллельных задач. Это полезно, поскольку общее количество активных потоков в экземпляре JVM ограничено, и если приложению потребуются тысячи активных потоков, жизненно важно иметь возможность повторно использовать приостановленные потоки. С другой стороны, JVM использует отображение 1:1 из потоков уровня приложения в потоки уровня ОС в Java; т. е. каждый экземпляр потока Java становится основным потоком уровня ОС.
Текущее решение основано на java.util.concurrency
в Java 1.5+. Тем не менее, нам нужны рабочие потоки, которые можно масштабировать до большого количества. Теперь мне интересно найти следующие ответы:
- Есть ли способ заменить реализацию
java.lang.Thread
в JVM, чтобы я мог подключить свою собственную реализацию потока? - Возможно ли это только путем настройки разделов C++ реализации потока в JVM и его перекомпиляции?
- Есть ли какая-нибудь библиотека, способная заменить классический поток в Java?
- Опять же, в той же строке, есть ли библиотека или способ указать, как некоторые потоки в Java могут быть сопоставлены с только одним потоком на уровне ОС?
Я также нашел this, в котором обсуждаются различные реализации JVM, и я не уверен, что они могут помочь .
Спасибо за ваши комментарии и идеи заранее.
java.util.concurrency
в Java 1.5+. Тем не менее, нам нужны рабочие потоки, которые можно масштабировать до большого количества. Спасибо за ваш комментарий, чтобы напомнить об этом. 21.07.2011