Fixing the Java Memory Model

User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Re: Fixing the Java Memory Model

Post by Sabina »



"Это все о нем" (JMX MBeans). Хотя кто его знает, может и сперли идею этих тулов у IBM :wink:

Сабина
User avatar
Blake
Уже с Приветом
Posts: 1102
Joined: 16 Sep 2003 04:41
Location: Out Of Blue

Re: Fixing the Java Memory Model

Post by Blake »

tengiz wrote: ...в смысле привнесения в параллельное программирование качественных и высокоэффективных абстракций.
Таких?
User avatar
hooch
Уже с Приветом
Posts: 1169
Joined: 16 Jan 2003 23:23

Re: Fixing the Java Memory Model

Post by hooch »

WildVlad wrote:
hooch wrote:
А вот уже компилятор может полагаться на среду исполнения.
Ну а когда уже и компилятор будет знать о авто-распараллеливании, то и определённые индивидуумы могут попытаться это использовать :mrgreen:


Если мы все еще говорим о Java, то для компилятора среда исполнения - это всегда JVM. JVM уже сеичас используют особенности конкретной ОС и процессора во время ран тайм для оптимизации исполнения кода, уверен, что и авто-распараллеливание используется в той или иной форме.
User avatar
Blake
Уже с Приветом
Posts: 1102
Joined: 16 Sep 2003 04:41
Location: Out Of Blue

Re: Fixing the Java Memory Model

Post by Blake »

Sabina wrote:Хотя кто его знает, может и сперли идею этих тулов у IBM :wink:


Вроде нет, но пока они (Sun) JSR-160 продвигали, IBM встроила JMX в WebSphere :wink:
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Re: Fixing the Java Memory Model

Post by Sabina »

WildVlad wrote:
*do not start thread from constructor, etc.

Спорное утверждение. Грозит только потерей ссылки на нить при исключении ниже по тексту конструктора.


Там упоминались две причины, одна старая классическая, другая связана с теми новинками, что реализованы в 1.5
Последнюю я как-то прослушала/недопоняла :oops:
А насчет классической, вот примерно подходящее описание:

Consider the following classes A and B:

Code: Select all

class A implements Runnable
{
    public A ()
    {
        ( new Thread ( this ) ).start ();
    }

    public void run ()
    {
        doSomething ();
        return;
    }

    public void doSomething ()
    {
        return;
    }
}

class B extends A
{
    private Object object;

    public B ()
    {
    // first line has an implicit call to this.A()

        object = new Object ();
    }

    public void doSomething ()
    {
        synchronized ( this )
        {
            try
            {
                object.wait ();
            }
            catch ( InterruptedException ie ) {}
        }

        return;
    }
}

I believe that constructor invocation is recursive.
The Java compiler places an implicit call to A's constructor on the first line of B's constructor.
Consider the following line of client code:

B b = new B ();

This invokes B's constructor. Before B's constructor can allocate memory for member object, A's constructor is run. A's constructor calls
( new Thread ( this ) ).start ();
This line starts a new thread running A's method run() (and this could happen even before control is returned to A's constructor which will finish before control is
returned to B's constructor). A.run () calls method doSomething(). While there is a method doSomething() in class A, there is also a method doSomething() in class B. Guess what? Class B's doSomething() method overrides class A's doSomething() method and is thus called in place of class A's doSomething() method (we
are constructing an instance of class B after all).
Class B's doSomething() method calls object.wait().
But, class B's constructor might not even have finished executing. Thus, object may not have been initialized and the call to object.wait() could produce a NullPointerException. It is important to add that this will not always happen. Under some JVMs, it is possible that this will never happen. Then again, it could happen. This is an instance of a RACE CONDITION. Race Conditions happen when data is not perfectly protected with synchronization.


Сабина
User avatar
tengiz
Уже с Приветом
Posts: 4468
Joined: 21 Sep 2000 09:01
Location: Sammamish, WA

Re: Fixing the Java Memory Model

Post by tengiz »

Blake wrote:...Таких?...

Нет, не таких. Это мало чем отличается от того, что можно сделать в C++. Я имею в виду не библиотеки классов, по сути являющиеся объектно-ориентированными обёртками для обычных синхронизационных примитивов и пр., а высокоуровневые фундаментальные абстракции для параллельного программирования, встроенные в язык. Посмотрите, например, по ссылкам, которые я приводил в своём предыдущем сообщении - всего лишь синхронные и асинхронные методы и так называемые аккорды, а насколько получается гибко и выразительно.
Cheers
User avatar
Blake
Уже с Приветом
Posts: 1102
Joined: 16 Sep 2003 04:41
Location: Out Of Blue

Re: Fixing the Java Memory Model

Post by Blake »

tengiz wrote:синхронные и асинхронные методы и так называемые аккорды, а насколько получается гибко и выразительно.


Посмотрел. Весьма недурно :wink:
User avatar
hooch
Уже с Приветом
Posts: 1169
Joined: 16 Jan 2003 23:23

Re: Fixing the Java Memory Model

Post by hooch »

VladDod wrote:
hooch wrote:Автораспараллеливание средствами языка программирования???

Модула :pain1:


Причем здесь модула? Топик вроде как о Java. :pain1:
leprechaun
Удален за рекламу собственного бизнеса
Posts: 178
Joined: 24 Jul 2002 08:02
Location: Baile Atha Cliath

Re: Fixing the Java Memory Model

Post by leprechaun »

WildVlad wrote:Кстати, они JDK1.5 не собираются назвать как-нить типа Java3? А то изменений уже порядком набирается %)


It's officially J2SE 5 now.
http://java.sun.com/j2se/1.5.0/snapshots/index.jsp
vc
Уже с Приветом
Posts: 664
Joined: 05 Jun 2002 01:11

Re: Fixing the Java Memory Model

Post by vc »

tengiz wrote:
.........
Иначе Java на серверах мало отличается от C/C++. Я только это и имел в виду. Больше ровным счётом ничего. Практический вывод который из этого следует для меня лично - никакого особенного интереса к Java на серверах у меня нет и пока быть не может. А жаль.

Хотя если Си шарп снизойдёт до реализации довольно старых красивых идей, которые с некоторых пор интересуют публику в MS Research - см.Introduction to Polyphonic C#, то может и Java тоже зачешется и рванёт в том же направлении. Вот тогда будет уже поинтереснее.

<added>
Вот чуть поинтереснее ссылка на PDF о Modern Concurrency Abstractions for C#.
</added>


Actually, a Java join calculus implementation by Itzstein pre-dates "polyphonic" C#'s ( http://citeseer.ist.psu.edu/532429.html ):

Code: Select all


Join Java:

public class OnePlaceBuffer {
  public Object get() & put(Object o) {
    return o;
  }
}

PC#:

public class Buffer {
   public String get() & public async put(String s) {
      return s;
   }
}



PC#'s code almost verbatim repeats Java's version so it's unclear at this time who should chase whom as currently neither language has anything but monitors as their standard highest level synchronization primitives.

Besides, it's unclear how efficient/accepted join calculus will prove to be in real applications in comparison to other approaches, Hoare's CSP, pi-calculus, etc.
User avatar
tengiz
Уже с Приветом
Posts: 4468
Joined: 21 Sep 2000 09:01
Location: Sammamish, WA

Re: Fixing the Java Memory Model

Post by tengiz »

vc, авторы текста о полифонии в До-диезе ясно пишут о том, откуда идут эти идеи, а также и о том, что похожие вещи были примерно в то же время предложены для Явы. В ссылках и в тексте соблюдены все необходимые приличия. А догонять, очевидно, будут того, кому первому посчастливится практически реализовать удобные, ясные, понятные и, разумеется, допускающие эффективную реализацию высокоуровневые абстракции для параллельного программирования.

Я лично очень мало сомневаюсь в практической реализуемости подобных идей. Это всего лишь вопрос времени и ресурсов. Задача уже давно созрела и необходимость в подобных расширениях существующих языков будет только усиливаться.
Cheers
vc
Уже с Приветом
Posts: 664
Joined: 05 Jun 2002 01:11

Re: Fixing the Java Memory Model

Post by vc »

tengiz wrote:vc, авторы текста о полифонии в До-диезе ясно пишут о том, откуда идут эти идеи, а также и о том, что похожие вещи были примерно в то же время предложены для Явы. В ссылках и в тексте соблюдены все необходимые приличия. А догонять, очевидно, будут того, кому первому посчастливится практически реализовать удобные, ясные, понятные и, разумеется, допускающие эффективную реализацию высокоуровневые абстракции для параллельного программирования.

Я лично очень мало сомневаюсь в практической реализуемости подобных идей. Это всего лишь вопрос времени и ресурсов. Задача уже давно созрела и необходимость в подобных расширениях существующих языков будет только усиливаться.


Firstly, let me state for the record that I don't care much either for Java or C#, both of whch are abominations (given a choice between those two, I actually prefer C#). However, for the sake of fairness, I thought I should have mentioned that the idea had been first implemented in Java since your information looked as if C# had a priority in this respect and Java was completely stagnant here. I am sure it was unintentional (no irony implied).
NNemo
Уже с Приветом
Posts: 1935
Joined: 15 Sep 2003 17:49
Location: Ukraine, Mariupol -> USA everywhere :-)

Post by NNemo »

User avatar
WildVlad
Уже с Приветом
Posts: 3982
Joined: 13 Jul 2000 09:01
Location: SVX -> BOS -> BUR -> SJC

Post by WildVlad »

NNemo wrote:MS легки на помине!
http://www.theserverside.net/news/threa ... d_id=27350

Вот это действительно шаг вперёд, особенно, если это приоретёт популярность.
I hated LA

Return to “Вопросы и новости IT”