E.A.Lee The Problems With Threads
От: Didro Россия home~pages
Дата: 20.03.07 22:48
Оценка: 186 (13)
Закончил перевод статьи Эдварда Ли "Проблемы с потоками" (The Problem With Threads). Автор работает в калифорнийском университете Беркли и возглавляет проект Ptolemy Project, посвящённый моделированию распределённых, параллельных систем, встроенных систем и систем реального времени. Сам проект имеет долгую историю, реализация системы открыта и хорошо описана. Язык реализации — Java.

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

В статье дан обзор и оценка различных способов разработки параллельных приложений, способов, основанных не на потоках. По мнению автора самым перспективным с практической точки зрения подходом к разработке является создание координационных языков (coordination languages).

Статья была ранее опубликована в журнале IEEE Computer. Обзор статьи, сделанный Сергеем Кузнецовым(который делает регулярные обзоры выпусков IEEE Computer) Вы можете найти здесь, кроме того обзор данной статьи уже обсуждался на RSDN — тут.

На мой взгляд, обзор не даёт полного представление о статье, поэтому и появился этот перевод.

Перевод опубликован также на сайте www.SoftCraft.ru

Комментарии по поводу перевода(ошибки\опечатки) прошу оставлять здесь.
Спасибо.
Re: E.A.Lee The Problems With Threads
От: Didro Россия home~pages
Дата: 21.03.07 06:53
Оценка:
За грудой ссылок забыл дать прямую ссылку на перевод. — здесь (pdf,500kb)
Re: E.A.Lee The Problems With Threads
От: deniok Россия  
Дата: 21.03.07 09:02
Оценка:
Это всё расчудесно. Я не очень понял только, где сам координационный язык? Или хотя бы прототипчик. Или хотя бы идея прототипчика. Или будем программировать диаграмками?

Я не вижу детального обсуждения разумных примитивов. (Активные) объекты, обменивающиеся сообщениями, — это известная и более-менее распространенная модель. А рандеву? Это примитив? Тогда как с ними программировать? Я могу бездумно собирать из мини-рандеву большие конструкции безопасным для скорости исполнения образом? И какие вообще гарантии эффективности механизм рандеву даёт?
Re[2]: E.A.Lee The Problems With Threads
От: A.Lokotkov Россия  
Дата: 23.03.07 12:06
Оценка: 29 (2)
Здравствуйте, deniok, Вы писали:

D>Это всё расчудесно. Я не очень понял только, где сам координационный язык? Или хотя бы прототипчик. Или хотя бы идея прототипчика. Или будем программировать диаграмками?


Coordination Models and Languages
bloß it hudla
Re[3]: E.A.Lee The Problems With Threads
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 23.03.07 13:47
Оценка: +1
Здравствуйте, A.Lokotkov, Вы писали:

D>>Это всё расчудесно. Я не очень понял только, где сам координационный язык? Или хотя бы прототипчик. Или хотя бы идея прототипчика. Или будем программировать диаграмками?


AL>Coordination Models and Languages


Интересно, какого года эта работа? Судя по тому, что в списке литературы самая молодая публикация датируется 1997-м годом, то где-то район 97-98-м. Довольно древнее описание, имхо.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[4]: E.A.Lee The Problems With Threads
От: A.Lokotkov Россия  
Дата: 23.03.07 13:49
Оценка:
Здравствуйте, eao197, Вы писали:

E>Интересно, какого года эта работа? Судя по тому, что в списке литературы самая молодая публикация датируется 1997-м годом, то где-то район 97-98-м. Довольно древнее описание, имхо.


Это обзор проблемы и вариантов решения. Для затравки.
Интересующиеся найдут что-нибудь посвежее, если смогут.
bloß it hudla
Re[5]: E.A.Lee The Problems With Threads
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 23.03.07 13:56
Оценка:
Здравствуйте, A.Lokotkov, Вы писали:

E>>Интересно, какого года эта работа? Судя по тому, что в списке литературы самая молодая публикация датируется 1997-м годом, то где-то район 97-98-м. Довольно древнее описание, имхо.


AL>Это обзор проблемы и вариантов решения. Для затравки.

AL>Интересующиеся найдут что-нибудь посвежее, если смогут.

Не обижайтесь, пожалуйста, я не в упрек. Спасибо за ссылку, я обязательно просмотрю документ на досуге.

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


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[6]: E.A.Lee The Problems With Threads
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 23.03.07 14:05
Оценка:
Здравствуйте, eao197, Вы писали:

E>Просто 10-ть лет -- это очень большой срок в индустрии. За это время много чего могло измениться. И возраст публикации нужен для того, чтобы понимать, на данный ли момент там описыватся ситуация, или так было десять лет назад.


Там же есть ссылка на java.util.concurrent из java 5 и заметка, что принципиально проблему это не решает. Так что можеш считать, что это адаптированный вариант
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[5]: E.A.Lee The Problems With Threads
От: deniok Россия  
Дата: 23.03.07 14:06
Оценка:
Здравствуйте, A.Lokotkov, Вы писали:

AL>Это обзор проблемы и вариантов решения. Для затравки.

AL>Интересующиеся найдут что-нибудь посвежее, если смогут.

Я, вот, почти полный профан в этой области, но когда мне говорят "Давайте забудем о потоках" (основной тезис исходной статьи), я с радостью кричу "Давайте!", и смотрю что взамен. Любому хочется программировать n-процессорную систему с (n>>1), не думая в терминах взаимодействия потоков и общеизвестных примитивов их синхронизации. Я единственное, что хочу увидеть — это более высокоуровневые примитивы, которые однако же гарантируют мне загрузку пусть не 100% процессоров 100% времени, но хоть 30%*30%. Но не вижу.

Я слишком много хочу?
Re[6]: E.A.Lee The Problems With Threads
От: A.Lokotkov Россия  
Дата: 23.03.07 14:10
Оценка:
Здравствуйте, eao197, Вы писали:

E>Просто 10-ть лет -- это очень большой срок в индустрии. За это время много чего могло измениться. И возраст публикации нужен для того, чтобы понимать, на данный ли момент там описыватся ситуация, или так было десять лет назад.


И не думал обижаться. У автора на страничке эта публикация датирована 1998 г. В индустрии за прошедшее время в этой области особых сдвигов не видно. Поэтому периодически появляются статьи о том, как муторно делать системы на thread-ах и пр.
bloß it hudla
Re[6]: E.A.Lee The Problems With Threads
От: A.Lokotkov Россия  
Дата: 23.03.07 14:12
Оценка: +1 :)
Здравствуйте, deniok, Вы писали:

D>Я слишком много хочу?


Это и есть самые, что ни на есть, правильные желания. Более того, из него можно смело убрать упоминание об n-процессорах.
bloß it hudla
Re[6]: E.A.Lee The Problems With Threads
От: deniok Россия  
Дата: 23.03.07 14:14
Оценка: :)
D>Здравствуйте, A.Lokotkov, Вы писали:

А за ссылку спасибо. Имена языков там красивые: Linda, Bonita, LAURA, Ariadne, CoLa. Привда ближе к концу Conic и Durra.
Re[7]: E.A.Lee The Problems With Threads
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 23.03.07 14:17
Оценка:
Здравствуйте, Andrei N.Sobchuck, Вы писали:

ANS>Здравствуйте, eao197, Вы писали:


ANS>

E>>Просто 10-ть лет -- это очень большой срок в индустрии. За это время много чего могло измениться. И возраст публикации нужен для того, чтобы понимать, на данный ли момент там описыватся ситуация, или так было десять лет назад.


ANS>Там же есть ссылка на java.util.concurrent из java 5 и заметка, что принципиально проблему это не решает. Так что можеш считать, что это адаптированный вариант


Андрей, ссылка на Java 5 есть в работе The Problem With Threads, которую перевел Didro (еще раз спасибо).
Я же говорю про Coordination Models and Languages, на которую указал
Автор: A.Lokotkov
Дата: 23.03.07
A.Lokotkov. В последней работе, вышедшей, кстати, в 1998-м, дается обзор на момент 1997-го года. Может быть за это время ничего принципиально не изменилось, но добрая половина упомянутых в обзоре языков, думаю, давно канула в Лету.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[8]: E.A.Lee The Problems With Threads
От: A.Lokotkov Россия  
Дата: 23.03.07 14:25
Оценка: 21 (1)
Здравствуйте, eao197, Вы писали:

ANS>>Здравствуйте, eao197, Вы писали:


Из "посвежее" забыл про Giotto. Хотя наверное я это уже постил здесь.
bloß it hudla
Re[8]: E.A.Lee The Problems With Threads
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 23.03.07 14:27
Оценка:
Здравствуйте, eao197, Вы писали:

E>Андрей, ссылка на Java 5 есть в работе The Problem With Threads, которую перевел Didro (еще раз спасибо).


Ага. Спасибо. Читал по диагонали
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[6]: E.A.Lee The Problems With Threads
От: Didro Россия home~pages
Дата: 23.03.07 17:04
Оценка: 56 (3)
Здравствуйте, deniok, Вы писали:

D>Здравствуйте, A.Lokotkov, Вы писали:


D>Я, вот, почти полный профан в этой области, но когда мне говорят "Давайте забудем о потоках" (основной тезис исходной статьи), я с радостью кричу "Давайте!", и смотрю что взамен. Любому хочется программировать n-процессорную систему с (n>>1), не думая в терминах взаимодействия потоков и общеизвестных примитивов их синхронизации. Я единственное, что хочу увидеть — это более высокоуровневые примитивы, которые однако же гарантируют мне загрузку пусть не 100% процессоров 100% времени, но хоть 30%*30%.

Но не вижу.

Если не касаться координационных языков, то...

вообще систем\языков для высокоуровневого параллельного программирования навалом. Опять же большинство известных(мне) были перечислены в статье Ли, это Erland, Ada(A# = Ada.NET, кстати реализация рандеву есть именно в Ada), Google's Map\Reduce, Cilk, MPI, OpenMP,...В Scala, на сколько я знаю, есть средства для реализации акторов на потоках. В Nemerle на макросах релизовали join-модель паралл.вычислений. Некоторое представление об объёме сегмента подобных систем есть тут и тут (материалы с сайта parallel.ru). В мейнстриме же по мнению Э.А.Ли широко используются только потоки(с этим можно спорить и т.д.). При этом скажем в MS Research разрабатывался одно время Polyphonic C# / C_omega. У нас на базе .NET делают MC# (Multiprocessor C#). В тоже время на последней конференции Интела(в СПб) ничего кроме хороших профайлеров, отлаженных библиотек-распараллеленых примитивов, и прочих вещей для работы непосредственно с потоками не было... Но, вообщем, выбор есть.

В группе Ли разработана(и развивается до сих пор) система моделирования Ptolemy — те самые кубички . Кубички кстати свою роль оч.хорошо выполняют — программист(или в случае Ptolemy это будет скорей специалист прикладной области) вообще не думает о потоках, он работает с сущностями по законам выбранной модели параллелизма. Можно ещё отметить, что по одной из трактовок ООП развивалось из моделирования, в этом смысле Ptolemy может дать толчок для развития параллельного программирования.
Re[6]: E.A.Lee The Problems With Threads
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.03.07 03:04
Оценка:
Здравствуйте, eao197, Вы писали:

E>Просто 10-ть лет -- это очень большой срок в индустрии. За это время много чего могло измениться.


В проблематике за это время ничего не изменилось. Но появилась реальная потребность в распараллеливании не только на серверах, но и в обычном ПО.
По сути появилась здача ускорять выполнение ПО за счет распараллеливания. А раньше она была не актуальна.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: E.A.Lee The Problems With Threads
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.03.07 03:04
Оценка: 13 (2) +1
Здравствуйте, deniok, Вы писали:

D>Я, вот, почти полный профан в этой области, но когда мне говорят "Давайте забудем о потоках" (основной тезис исходной статьи), я с радостью кричу "Давайте!", и смотрю что взамен. Любому хочется программировать n-процессорную систему с (n>>1), не думая в терминах взаимодействия потоков и общеизвестных примитивов их синхронизации. Я единственное, что хочу увидеть — это более высокоуровневые примитивы, которые однако же гарантируют мне загрузку пусть не 100% процессоров 100% времени, но хоть 30%*30%. Но не вижу.


D>Я слишком много хочу?


Мне кажется общее решение лежит на поврехности. Все что я прочел за это время предлагало только одно. Отказаться от синхронизации управления и перейти к синхронизации данных.

Ну, а реализации тут могут быть самым разными. Посылка сообщений в очереди (Эрланг и Сингулярити), Рандеву (АДА... плохо понимаю смысл этого дела, но чувствую, что суть та же), Активные объекты (Оберон и что там еще?), STA-апартаменты в COM, использование разных процессов ОС.

Так как данные синхронизируются тем или иным образом потоки управления получаются изолированными и работающими независимо. Ну, а изоляцию данных легко позволяют организовать типобезопасные языки или среды исполнения.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: E.A.Lee The Problems With Threads
От: OCTAGRAM Россия http://octagram.name/
Дата: 25.03.07 09:00
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Ну, а реализации тут могут быть самым разными. Посылка сообщений в очереди (Эрланг и Сингулярити), Рандеву (АДА... плохо понимаю смысл этого дела, но чувствую, что суть та же), Активные объекты (Оберон и что там еще?), STA-апартаменты в COM, использование разных процессов ОС.


Оберон и... Зоннон. То, что в Сингулярити, сильно напоминает мне Зоннон.

STA в COM – это в аккурат пассивный монитор.

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

Если задача была не занята, и точка входа открыта, вызов происходит как у объектов, не считая накладных расходов по закрыванию точек входа.

В Эрланге сообщения асинхронные, в Аде вызовы рандеву длятся, пока не кончится блок accept. С другой стороны, в блоке accept можно оставить себе данные и работать дальше.


task body Demo is
   loop
[...]
      declare
         MyNumber : Integer;
         MyResult : Integer;
      begin
         accept StartCalc (Number : in  Integer) do
            MyNumber := Number;
         end StartCalc;
[...]
         accept GetResult (Result : out Integer) do
            Result := GetResult;
         end GetResult;
      end;
[...]
   end loop;
end Demo;


Примерно так.


Хм... то ли Вики забодяжить на эту тему.
Re[8]: E.A.Lee The Problems With Threads
От: WolfHound  
Дата: 25.03.07 13:47
Оценка: +1
Здравствуйте, OCTAGRAM, Вы писали:

OCT>Оберон и... Зоннон. То, что в Сингулярити, сильно напоминает мне Зоннон.

Ты не разобрался либо в сингулярити, либо в зононе, либо и в том и в другом.
Принципиальное отличие в том что протокол в сингулярити навешивается на канал, а в зонноне на активность.
Данное отличие сводит практически к нулю приминимость зоннона. Ибо очень много задач где у активности должно быть несколько каналов общения.
Болие того иногда колличество каналов задается из конфига, а иногда и вобще определяется во время работы.
... << RSDN@Home 1.2.0 alpha rev. 673>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.