Java Parallel computing: multicore, Erlang, Scala
От: DenysSG  
Дата: 16.11.08 07:03
Оценка: 11 (2)
Я никогда не занимался девелопментом parallel computing, поэтому все что я здесь напишу результат 2-х дневного исследования,
т.к. в пятницу мне сообщили что я буду программировать на Erlang`е для нашего Java EE проекта.

Во-первых, все мы знаем что закон Мура изменился: теперь производители процессоров начинают делать многоядерные решения.

К примеру,

Intel has a project called Keifer aimed at producing at a thirty two
core
processor timed for the market in 2009/2010. Sun
already has an eight-core (with four hardware threads per
core) Niagra machine on the market today.
Цитата из книги Programming Erlang, Joe Armstrong



Все мы знаем что в "параллельном мире" существуют 2 основные концепции:
— Shared memory
— Message Passing Interface (MPI)

Очень многие языки, в т.е. пошли по первому пути, в т.ч. и Java.
Я не знаком с обширным мнением экспертов по данному вопросу, но то что я прочитал — первый путь (Shared Memory), как особенно видно сейчас, неудачен.

Особенно мне нравится философское видение вопроса тем же Армстронгом

We don’t have shared memory. I have my memory. You have yours.
We have two brains, one each. They are not joined together. To
change your memory, I send you a message: I talk, or I wave my
arms.
You listen, you see, and your memory changes; however, without
asking you a question or observing your response, I do not know
that you have received my messages.
This is how it is with Erlang processes. Erlang processes have no
shared memory. Each process has its own memory. To change the
memory of some other process, you must send it a message and
hope that it receives and understands the message.
To confirm that another process has received your message and
changed its memory, you must ask it (by sending it a message).
This is exactly how we interact.
Sue: Hi Bill, my telephone number is 45 67 89 12.
Sue: Did you hear me?
Bill: Sure, your number is 45 67 89 12.
These interaction patterns are well-known to us. From birth onward
we learn to interact with the world by observing it and by
sending it messages and observing the responses.



Теперь вопрос, что же будет дальше. 32 ядра от Интел в следующем или 2010 году — очень неожиданно.
И Java не очень-то готова.
А уже написанные приложения работающие с Shared Memory, как я понимаю,
еще в худшем положении, если возникнет потребность увеличить ресурсы и использовать все ядра.

Решения, которые я нашел
A Java Fork/Join Framework
DataRush
Что выглядит не очень привликательно.

А что ещё есть — Scala или Erlang через Jinterface Application.

Вообщем, еще пару новвоведений и в мире появится новый доминирующий язык, в доке которого о причинах его появления мы будем читать не только о всех недостатках C++, но и Java.
Другой вариант — многоязычное приложение, что, возможно, тоже не самое лучшее — ведь разные языки должны интегрироваться, и интеграция потребует затрат.

У кого какое мнение — высказывайтесь.

Дополнительное чтение
http://architects.dzone.com/news/building-multi-core-ready-java
http://www.infoq.com/news/2008/06/scala-vs-erlang









19.11.08 03:38: Перенесено из 'Java'
Java Multicore Erlang Scala Parallel computing
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.