Базы данныхИнтернетКомпьютерыОперационные системыПрограммированиеСетиСвязьРазное
Поиск по сайту:
Подпишись на рассылку:

Назад в раздел

Java против потоков

div.main {margin-left: 20pt; margin-right: 20pt} Java против потоков

Вычислительные потоки - вот те средства, которые позволяют использовать действительно много поточные средства. Как обычно реализуются эти вичислительные потоки (thread)? Здесь существует два способа - прямое отображение Java вычислительного потока в поток операционной системы или же отображения множества потоков виртуальной машины в один поток операционной системы (так называемая технология Green Thread).

И так к примеру мы имеем некий сервис, который обрабатывает некие события, события эти появляются просто толпами, но на их обработку уходить очень и очень мало времени. На каждое событие запускается новый вычислительный поток (для его обработки). По такой схеме, к примеру, может работать и WEB сайт или любой другой публичный сервис.

Все в такой схеме хорошо, пока одновременных потоков бывает несколько десятков или сотен. И даже если они и не выполняют никакой работы, существует опасность разрушения виртуальной машины. Связанно это с ограничением на количество одновременно запущенных вичислительных потоков в операционной системе (рассматривается случай прямого отображения потоков).

Для проверки и тестирования систем разработан тест (Java, С++ и Delphi), в результате деятельности теста - запускается большое количество однвременных потоков. Когда ограничение будет превышено - работа виртуальной машины будет прекращена. В данных тестах, потоки только запускаются, но ничего не выполняют.

Hardware/OS JVM Результат (потоков) Результат работы
PIII, W2K Prof, 192 RAM Sun JDK 1.3.1 rc2 ~7000 OutOfMemoryError
W2K Prof, P-III 750, 256M native (Delphi) ~9000
W2K Prof, P-III 750, 256M ? ~7000 OutOfMemoryError
Linux SUN JDK 1.3.0_02 (Green threads) 9999
Linux Blackdown-1.3.0 (Green threads) 9999
Linux SUN JDK 1.3.1 (Green threads) 9999
WinNT4 sp6, Cel333/128 SUN JDK JDK-1.2.2_007 (Native) 1929 OutOfMemoryError
WinNT4 sp6, Cel333/128 native (Delphi) ~17000 (real ~2000)
WinNT4 sp6, Cel333/128 native (C++) 3822 Error 31
P3/256, NT4 SP6 native (C++) 4136 Error 31
P3/256, NT4 SP6 J2RE 1.3.0 IBM JIT (Native) 4163 OutOfMemoryError
P3/256, NT4 SP6 Java HotSpot(TM) Client 1.3.0-C (Native) 4157 OutOfMemoryError

Итак что же у нас получается? Что Green threads позволяют создать большее количество потоков, чем при использовании нативных потоков. Однако не все так радужно, отображение множества потоков на один поток так же не лишено недостатков. И здесь придется выбирать между "двух зол".

Отдельных результатов заслуживает разговор о нативных "тестировалках" - программа написанная на дельфи хоть и показывает немыслеммые результаты десятки тысяч потоков, но на самом деле их всего не больше ~2000. Ясность тут вносит тест на С++, именно он почти и показывает реальные результаты (из нативных). Дело здесь все в размере стека в конкретной операционной системе (в данном случае NT WS). По окончании места в стеке - новые потоки прекращают создаваться и возникает ошибка либо связанная с отсутствием памяти либо с отказом "устройства" создания новых потоков. Добиться результата на нативном коде сопоставимым с Java удалось лишь только после уменьшения размера памяти резервируемого в стеке для каждого нового потока (без такого "шаманства" результаты были около 2000 (т.е. на уровне реального количества потоков в дельфи)). К слову говоря - Java класс получился по размеру самым маленьким.



  • Главная
  • Новости
  • Новинки
  • Скрипты
  • Форум
  • Ссылки
  • О сайте




  • Emanual.ru – это сайт, посвящённый всем значимым событиям в IT-индустрии: новейшие разработки, уникальные методы и горячие новости! Тонны информации, полезной как для обычных пользователей, так и для самых продвинутых программистов! Интересные обсуждения на актуальные темы и огромная аудитория, которая может быть интересна широкому кругу рекламодателей. У нас вы узнаете всё о компьютерах, базах данных, операционных системах, сетях, инфраструктурах, связях и программированию на популярных языках!
     Copyright © 2001-2021
    Реклама на сайте