elizarov


Блог Романа Елизарова


Previous Entry Share Next Entry
По следам JavaOne: Challenges in Multicore Era
elizarov
Пора начать серию постов по следам лучших презентаций на прошедшем JavaOne. Все, кто хочет сам порыться в материалах конференции, приглашаются на JavaOne Online.

На дворе "многоядерная эра". Если раньше медленный софт можно было не переписывать, а просто подождать когда появится более быстрый процессор, то в наступающей эре программированию предстоит пережить изменение всех парадигм программирования. Надо научиться эффективно использовать всё возрастающее количество ядер, каждое из которых не сильно быстрей, а порой и медленей ядер предыдущего поколения.

Доклад Challenges in Multicore Era, представленный Azul Systems и Sun Microsystems, это короткий и содержательный отчет о текущей ситауции в индустрии и академическом мире, который рассказывает текущее положение вещей и формулирует нерешенные проблемы. Основная цитата:
The hardware, the OS, and the JVM are ready for large numbers of cores.
The languages, the tools and the programming community at large are not ready for large concurrent programs.
So... good luck, guys!

Для тех кто всеръез увлекается многопоточным программированием с созданием non-blocking алгоритмов (только такие алгоритмы масштабируются на десятки и сотни ядер) очень рекомендую Toward a Coding Style for Scalable Nonblocking Data Structures который также можно посмотреть. Это досточно технически-сложный материал понятный по слайдам только тогда, когда уже всё знаешь.
Tags:

  • 1
А книжки про это есть?

Про что это вы хотели бы почитать?

Про non-blocking algorithms. В книжке Goetz-а есть 10 страниц про это, но похоже тема гораздо обширнее.

Советую начать с классической работы Херлихи 1991 года - Wait-Free Synchronization. Рекумендую также внимательно изучить все ранние работы Лампорта, так как именно он одним из первых формализовал и аксиоматизировал многие понятия.

Про современные же достижения в этой области естественно никаких книг нет, но есть куча научных статей, ведь это предмет активнейшей научно-иследовательской работы в 21-м веке.

А что у Azul'а за ядро такое, что CAS не как у всех работают, судя по слайдам!?

С точки зрения "пользователя" CAS у них работает ровно так, как этого требует Java Memory Model. Но ядро у них действительно хитрое и о подробностях внутренней реализации они не сильно распространяются.

Если честно, я думал, что там внутри какой-нибудь SPARC, и вся их уникальность именно в системе в целом, а ядро-то — стандартное…
Неужели никто до сих пор не вскрыл коробку, не слил прошивку, etc?

Мне понравилось мнение кнута в одном из недавних интервью. Его спросили не собирается ли он затронуть в своем труде проблемы программирования для многоядерных систем. К сожалению ссылку потерял, а более менее сносно мысль передать не смогу. В двух словах: Это - приходящее.

Надо научиться эффективно использовать всё возрастающее количество ядер,

Скорее в Жабу введут невидимые распараллеливающие библиотеки, чем хотя бы пять процентов на ней программирующих научастя писать приличный код.

А на каком языке по вашему умеют писать приличный код?

Приличный код можно написать на любом языке. Просто олухи кучкуются вокруг "безопасных" и "прогрессивных"
А в остальном, стоит упомянуть и о самом главном косяке. А всё потому, что Сан форсированного выбросил сырой продукт на рынок.

Автор поста, Dave Butenhof, человек небезызвестный в области threads.


No, suspend/resume and "thread death" are BUGS, not functionality". Asynchronous suspend and resume cannot be used correctly without knowing precisely what each target thread is doing at each instant. If you catch a target while it holds a resource, you risk irresolvable deadlock. The only safe form of suspend and resume is a "suspend self" that can only suspend the calling thread in a known state.

Приличный код можно написать на любом языке. Просто олухи кучкуются вокруг "безопасных" и "прогрессивных"
Имхо тут дело не в олухах, а в том, что люди преимущественно используют оптимистичный метод обучения. Просматривают туториал по языку, набираются N идиом, и дальше читают мануал, по мере появления проблем. И это имхо в большинстве случаев хорошо. Особенно в гуманитарных дисциплинах. Только вот в областях, вроде математики, и паралельного программирования это не работает.

А в остальном, стоит упомянуть и о самом главном косяке. А всё потому, что Сан форсированного выбросил сырой продукт на рынок.

Эти методы задеприцированы, и ни один нормальный человек не будет их использовать без действительно большой надобности. Почему их добавили, кстати, достаточно понятно. ОС поддерживает такие вещи с нитками, почему бы их не поддержать на уровне языка. Насколько я знаю, до Java не было ни одного реально mainstream языка, в котором была поддержана многонитиевость, так что неудивительно, что не все стало работать хорошо сразу.

Скорее в Жабу введут невидимые распараллеливающие библиотеки

Примерно в этом направлении в Sun-е и думают... Я напишу более подробно о планирующихся в Java 1.7 изменениях.

А в каком ещё направлении они могут думать? :-)

  • 1
?

Log in

No account? Create an account