OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Воскресенье, 21 Октябрь, 2018 04:19

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 55 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Coroutines вместо потоков
СообщениеДобавлено: Пятница, 19 Сентябрь, 2014 13:08 

Зарегистрирован: Вторник, 01 Март, 2011 09:34
Сообщения: 277
Откуда: Москва
Статья в объектных системах - 2014 по сопрограммам, как альтернативе потокам.
Пакет для BlackBox/XDS http://sourceforge.net/projects/ta1/files/co2.0/


Вложения:
not_only_threads.pdf [143.73 КБ]
Скачиваний: 281
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Coroutines вместо потоков
СообщениеДобавлено: Пятница, 19 Сентябрь, 2014 19:12 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 7858
Откуда: Троицк, Москва
Большое спасибо!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Coroutines вместо потоков
СообщениеДобавлено: Пятница, 05 Декабрь, 2014 11:08 

Зарегистрирован: Вторник, 01 Март, 2011 09:34
Сообщения: 277
Откуда: Москва
Пару ложек дегтя использующим или разрабатывающим сопрограммы
Шиперски писал(а):
The lack of allowing garbage collection while stacks may contain valid pointers, and the impossibility to provide coroutines stacks that are protected against overflows render the coroutine packages less usefull


1. Отсутствует защита от переполнения стека. Не знаю насчет невозможности, но вставлять компилятором ASSERT(SP-initialSP>stacksize) при вызове процедур только приходит в голову.

2. Сборщик мусора, видимо, не анализирует локальные стеки сопрограмм. Если в сопрограмме происходит NEW(ptr), то это может привести к преждевременному освобождению памяти.

У меня в Co эти проблемы не решены.

Илья Ермаков,
думаю стоит обратить на это внимание в Вашей разработке Tasks.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Coroutines вместо потоков
СообщениеДобавлено: Пятница, 05 Декабрь, 2014 12:26 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9010
Откуда: Россия, Орёл
У нас решены обе эти проблемы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Coroutines вместо потоков
СообщениеДобавлено: Четверг, 16 Апрель, 2015 10:42 

Зарегистрирован: Среда, 17 Январь, 2007 03:59
Сообщения: 225
А что это за модуль Tasks?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Coroutines вместо потоков
СообщениеДобавлено: Четверг, 16 Апрель, 2015 14:27 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9010
Откуда: Россия, Орёл
Спасибо за вопрос, отвечу в ЛС обязательно в ближайшие пару дней.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Coroutines вместо потоков
СообщениеДобавлено: Четверг, 16 Апрель, 2015 17:09 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2930
Откуда: г. Ярославль
Штирлиц писал(а):
А что это за модуль Tasks?
Присоединяюсь к вопросу :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Coroutines вместо потоков
СообщениеДобавлено: Четверг, 16 Апрель, 2015 18:10 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9010
Откуда: Россия, Орёл
Хорошо :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Coroutines вместо потоков
СообщениеДобавлено: Вторник, 28 Март, 2017 20:46 

Зарегистрирован: Вторник, 01 Март, 2011 09:34
Сообщения: 277
Откуда: Москва
У меня была переписка с 08.03.2017 с Josef Templ по поводу пакета Coroutines - Co_, который я разработал и опубликовал в 2014 г
- на CPC: http://www.zinnamturm.eu/downloadsAC.htm#Co_
- на sourceforge http://sourceforge.net/projects/ta1/files/co2.0/
по пакетам лицензионных ограничений нет.

Далее 21.03 появилась заметка "adding Coroutines to BlackBox" в https://forum.blackboxframework.org/viewtopic.php?f=41&t=610.
Сказано, вдохновленный пакетом Co_.
А, поскольку написать прямо в blackboxframework я не могу, я изложу свою позицию здесь, пусть читают по-русски (хорошо бы, Ивану Андреевичу любезно дать им ссылку на этот пост).

1-ADDING COROUTINES TO BLACKBOX https://redmine.blackboxframework.org/issues/156
- звучит неправильно, мой пакет давно добавлен. Другой разрабатывает Josef Templ. Если использует что-то из меня - замечательно.
Но нужно бы написать -
Josef Templ писал(а):
integration into Kernel services such as garbage collection, trap handling and trap cleaners
.
И нужно сделать поддержку со стороны ядра сборку мусора для локальных стеков и очистку трапов. Чтобы работало для всех пакетов. Кстати, есть еще и пакет сопрограмм Ермакова.

2-BASED ON WINDOWS FIBERS
Как справедливо замечено
Иван Денисов писал(а):
Your design is binding BlackBox to Windows OS forever
.
А у меня версия Co_ для BlackBox/XDS Windows/Linux.
И, между прочим, работает на 1 блоке Ростовской АЭС.

3-Есть 2 вида сопрограмм http://wiki.c2.com/?CoRoutine:
1.Anonymous coroutines - переключаются планировщиком для кооперативной многозадачности (Cooperative Multitasking). Они не обмениваются между собой данными. Сопрограмма просто уступает управление командой Yield. А планировщик выбирает, на какую программу переключить.
2.Directed coroutines - Явно осуществляется переход. Используется в генераторах и проч по схеме Transfer - Yield. Как правило, обмениваются между собой данными.
В чем проблема? На рисунке co3.png показано, как переключаются 3 сопрограммы.
Process1 вызывает Process2, Process2 вызывает Process 3, Process 3 вызывает Process 1.
Эта схема работает только, когда процессы не обмениваются данными, т.е. для анонимных сопрограмм.
Для directed coroutines реентерабельность должна быть запрещена.
Правильная последовательность :
Process1(transfer)->Process2(transfer)->Process3(yield)->Process2(yield)->Process1

В пакете Co_ это все реализовано, там есть планировщик со своими примерами и примеры с вызовами одной сопрограммы из другой.

4-a rather complex programming interface
Josef Templ писал(а):
a rather complex programming interface

Я предпочитаю AS SIMPLE AS POSSIBLE, BUT NOT SIMPLER. Простота не за счет исгнорирования проблем.
Был мой пример с SameFringe Problem
Дагаев
Код:
   IMPORT Ct := Co_Tasks, Co := Co_Routines, Log;
   
   TYPE
      Tree = POINTER TO TreeDesc;
      TreeDesc = RECORD
         name: ARRAY 16 OF CHAR;
         left, right: Tree
      END;
      
      Traverse = POINTER TO TraverseDesc;
      TraverseDesc = RECORD (Co.CoroutineDesc)
         tree, leaf: Tree
      END;
      
   PROCEDURE NextTreeLeaves (trav: Traverse; tree: Tree);
   BEGIN
      IF (tree.left = NIL) & (tree.right = NIL) THEN
         trav.leaf := tree;
         Co.Yield
      END;
      IF tree.left # NIL THEN
         NextTreeLeaves (trav, tree.left)
      END;
      IF tree.right # NIL THEN
         NextTreeLeaves (trav, tree.right)
      END;
   END NextTreeLeaves;
      
   PROCEDURE Do (t: Ct.Task);
      VAR trav: Traverse;
   BEGIN
      trav := t(Traverse);
      NextTreeLeaves(trav, trav.tree);
      Co.Stop
   END Do;
   
   PROCEDURE Problem*;
      VAR t1, t2, c1, c2: Tree; r1, r2: Traverse; same: BOOLEAN;
   BEGIN
      (* two trees are different, but have the same fringe: a, b, c *)
      NEW(t1); NEW(c1); t1.left := c1; NEW(c2); c2.name := "a"; c1.left := c2; NEW(c2); c2.name := "b";
      c1.right := c2; NEW(c1); t1.right := c1; NEW(c2); c2.name := "c"; c1.left := c2;
      NEW(t2); NEW(c1); t2.left := c1; NEW(c2); c2.name := "a"; c1.left := c2; NEW(c2); c2.name := "b";
      c1.right := c2; NEW(c1); t2.right := c1; NEW(c2); c1.left := c2;
      NEW(c1); c1.name := "c"; c2.left := c1;
      
      NEW(r1); r1.tree := t1;
      NEW(r2); r2.tree := t2;
      same := TRUE;
      Co.InitCoroutine(r1, Do); Co.InitCoroutine(r2, Do);
      r1.Start(r1); r2.Start(r2);
      WHILE ~r1.eor & ~r2.eor & same DO
         r1.Transfer(r1);
         r2.Transfer(r2);
         same := (r1.leaf.name$ = r2.leaf.name$)
      END;
      IF ~r1.eor OR ~r2.eor THEN same := FALSE END;
      Log.String("tree1(a,b,c) vs tree2(a,b,c): The Same Fringe is"); Log.Bool(same); Log.Ln;
      
      (* modify second, append 'd' *)
      NEW(c2); c2.name := "d"; c1.right := c2;
      same := TRUE;
      Co.InitCoroutine(r1, Do); Co.InitCoroutine(r2, Do);
      r1.Start(r1); r2.Start(r2);
      WHILE ~r1.eor & ~r2.eor & same DO
         r1.Transfer(r1);
         r2.Transfer(r2);
         same := (r1.leaf.name$ = r2.leaf.name$)
      END;
      IF ~r1.eor OR ~r2.eor THEN same := FALSE END;
      Log.String("tree1(a,b,c) vs tree2(a,b,c,d) The Same Fringe is"); Log.Bool(same); Log.Ln;
      
   END Problem;


Появился пример
J.Templ
https://redmine.blackboxframework.org/projects/blackbox/repository/diff?utf8=%E2%9C%93&rev=69c1383cadb025bd8eef4df48aab8fe1ac8bf0c0&rev_to=5ce6ea8c5090b35e4c93b5051e43a03634663ac9


Вложения:
co3.png
co3.png [ 15.24 КБ | Просмотров: 4384 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Coroutines вместо потоков
СообщениеДобавлено: Вторник, 28 Март, 2017 21:59 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2189
Откуда: Красноярск
Дмитрий Викторович, чтобы лучше понять Вас, хочу задать несколько вопросов.

Вам не по душе попытка Йозефа внедрить базовую поддержку сопрограмм в Блэкбокс? Были допущены недопустимые упрощения?

В Вашей реализации выполнение сопрограмм также в одном потоке? Почему вообще эта тема в ветке про "параллельное и многопоточное программирование"?

Замечания по перовому пункту (ADDING COROUTINES TO BLACKBOX).
Вот замечания Темпла "This package, however has a rather complex programming interface and is not integrated with the garbage collector and other Kernel services."
Согласен, что интерфейс очень сложный из-за того, что он не интегрирован, или по другой причине.

По второму (BASED ON WINDOWS FIBERS).
Йозеф отделил по своему логику от реализации. Мне не нравится как это сделано, но так получается наиболее простой интерфейс через наследование как Actions. Реализация вынесена в ядро, что не очень с точки зрения поддержки, но терпимо. Так что отчасти моё замечание снимается.

Какова суть вашего предложения? Ничего не менять и использовать подсистему Co_ ? Что нужно сделать в Блэкбоксе для упрощения подсистемы Co_ ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Coroutines вместо потоков
СообщениеДобавлено: Вторник, 28 Март, 2017 22:09 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2189
Откуда: Красноярск
Как я понимаю Йозефа, он делает сейчас какой-то проект с сервером и ему приглянулись сопрограммы для журналирования чего-то. Но цель усилий по внедрению этих возможностей в Блэкбокс — дать кругу пользователей возможность более легко получить опыт использования сопрограмм.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Coroutines вместо потоков
СообщениеДобавлено: Вторник, 28 Март, 2017 22:45 

Зарегистрирован: Вторник, 01 Март, 2011 09:34
Сообщения: 277
Откуда: Москва
Иван Денисов писал(а):
Вам не по душе попытка Йозефа внедрить базовую поддержку сопрограмм в Блэкбокс? Были допущены недопустимые упрощения?
Вот замечания Темпла "This package, however has a rather complex programming interface and is not integrated with the garbage collector and other Kernel services."

1. Вообще-то я добавил COROUTINES TO BLACKBOX, а не Templ.

Иван Денисов писал(а):
В Вашей реализации выполнение сопрограмм также в одном потоке? Почему вообще эта тема в ветке про "параллельное и многопоточное программирование"?

2. Co_ есть поддержка кооперативной многозадачности (Cooperative Multitasking), в новом модуле - нет.

Иван Денисов писал(а):
Согласен, что интерфейс очень сложный из-за того, что он не интегрирован, или по другой причине.

3.
Для сопрограмм используются модуль Co_Routines, Co_Tasks.
Для кооперативной многозадачности используется также планировщик SchedTasks.
Остальное - примеры.
И где тут сложность?

Иван Денисов писал(а):
По второму (BASED ON WINDOWS FIBERS).
Йозеф отделил по своему логику от реализации. Мне не нравится как это сделано, но так получается наиболее простой интерфейс через наследование как Actions. Реализация вынесена в ядро, что не очень с точки зрения поддержки, но терпимо. Так что отчасти моё замечание снимается.

4. А у меня так:
BB Win - Windows Fibers
XDS Win/Linux - Modula COROUTINES
BB Linux - ucontext_t
Это - портабельный продукт

Иван Денисов писал(а):
Какова суть вашего предложения? Ничего не менять и использовать подсистему Co_ ? Что нужно сделать в Блэкбоксе для упрощения подсистемы Co_ ?

5. в Kernel нужна поддержка очистки локальных стеков "garbage collector and other Kernel services".
Но: в Kernel не должно быть зашито вызовов Windows Fiber только для модуля J Templ: Kernel.InitCoroutines, Kernel.AddCoroutine, Kernel.SetCoroutineBase, Kernel.RemoveCoroutine, Kernel.TransferCoroutine.
6. Co_ я сам подкручу


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Coroutines вместо потоков
СообщениеДобавлено: Вторник, 28 Март, 2017 22:54 

Зарегистрирован: Вторник, 01 Март, 2011 09:34
Сообщения: 277
Откуда: Москва
Иван Денисов писал(а):
Как я понимаю Йозефа, он делает сейчас какой-то проект с сервером и ему приглянулись сопрограммы для журналирования чего-то. Но цель усилий по внедрению этих возможностей в Блэкбокс — дать кругу пользователей возможность более легко получить опыт использования сопрограмм.

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

Кстати, для развлечения там есть:
- Задача обедающих философов,
- Задача писатель - читатель,
- Задача расчетов через Action.

Все это - не дополнительные сложные модули, а Obx-примеры.

И, в отличие от Йозефа, я это уже 3 года как внедрил назад, и в кросплатформенном варианте.

Тема Coroutines очень интересна как стиль программирования. Правда, сам по себе стиль программирования этот сложен, соглашусь. Надо будет рассказать про эти стили на дне Оберона.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Coroutines вместо потоков
СообщениеДобавлено: Вторник, 28 Март, 2017 23:04 

Зарегистрирован: Вторник, 01 Март, 2011 09:34
Сообщения: 277
Откуда: Москва
Жаль связи нету. Вот, например https://forum.blackboxframework.org/viewtopic.php?f=41&t=610&start=20#p5805,
Robert писал(а):
Some time ago I read about Python iterators and the "Yield" statement when trying to solve a problem of this type - I forget the details.
Is the Python "Yield" similar to the BlackBox "Transfer"?

Есть 2 вида сопрограмм http://wiki.c2.com/?CoRoutine
1.Anonymous. По команде Yield управление передается планировщику, который выбирает следующую сопрограмму.
2.Directed. По команде Yield управление передается вызвавшей программе/сопрограмме. Pop по отношению к стеку вызовов.

Команда Transfer - передает управление новой сопрограмме. Push стека вызовов сопрограмм. Для Anonymous не используется.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Coroutines вместо потоков
СообщениеДобавлено: Вторник, 28 Март, 2017 23:36 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 7858
Откуда: Троицк, Москва
Дмитрий Дагаев писал(а):
Надо будет рассказать про эти стили на дне Оберона.
Обязательно надо будет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Coroutines вместо потоков
СообщениеДобавлено: Вторник, 28 Март, 2017 23:43 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 7858
Откуда: Троицк, Москва
Иван Андреевич, эти модификации ядра ББ -- они будут вшиты для всех? -- или как опция при старом ядре, которое останется как основной вариант?

Хотелось бы второго.
Очень не хочется опасных нагромождений.
В версии от Центра и так уже много каких-то изменений.
(Например, слишком уж навязчиво выглядят значки для Folds.)

Избыточная сложность -- уязвимость.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Coroutines вместо потоков
СообщениеДобавлено: Среда, 29 Март, 2017 01:18 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2189
Откуда: Красноярск
Есть Блэкбокс, а есть расширения Блэкбокса. Не надо это путать. В Блэкбокс что-то добавить могут только мэйнтэйнеры. Для версии 1.6 это были Оминк, для 1.7 это Центр.
Йозеф не разрабатывает пакет, а интегрирует часть ваших наработок в главный дистрибутив. Не пойму, сознательно ли вы вносите путаницу?

Йозеф добавил, Вас, Дмитрий Викторович, в соавторы, так как почти все позаимствовал у вашей реализации. А то звучит так как будто Вы хотите обвинить Йозефа в воровстве или умалчивании Вашего авторства.

Ваша реализация все-таки не совсем свойственна для КП, в ней явный след Оберона. Desk нет нужды использовать. Примеры с семафорами. Йозеф сознательно упростил все и убрал планировщик, чтобы поддерживать только второй вид сопрограмм (Directed). Возможно это урезанная версия, но зато она простая. С чего-то надо начать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Coroutines вместо потоков
СообщениеДобавлено: Среда, 29 Март, 2017 01:20 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2189
Откуда: Красноярск
Цитата:
BB Linux - ucontext_t

Это где-то выложено?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Coroutines вместо потоков
СообщениеДобавлено: Среда, 29 Март, 2017 01:25 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2189
Откуда: Красноярск
Info21 писал(а):
Иван Андреевич, эти модификации ядра ББ -- они будут вшиты для всех? -- или как опция при старом ядре, которое останется как основной вариант?

Хотелось бы второго.
Очень не хочется опасных нагромождений.
В версии от Центра и так уже много каких-то изменений.
(Например, слишком уж навязчиво выглядят значки для Folds.)

Избыточная сложность -- уязвимость.

Опции - это тоже сложность. Так что планируется без опций. Возможность сопрограмм пока только обсуждается. Но многим пока эта идея нравится несмотря на некоторые риски. Это будет контролируемый эксперимент.

По поводу фолдов - ваше субъективное мнение. Неприятие новых символов символично.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Coroutines вместо потоков
СообщениеДобавлено: Среда, 29 Март, 2017 08:27 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 7858
Откуда: Троицк, Москва
Иван Денисов писал(а):
Опции - это тоже сложность.
Смотря для кого.

Иван Денисов писал(а):
многим пока эта идея нравится несмотря на некоторые риски.
Меня пугают как раз риски. И так до конца сойти с 1.5 не могу.

Иван Денисов писал(а):
Это будет контролируемый эксперимент.
Кто его будет контролировать?
Вы предлагаете просто верить Вам и Центру.
Центр сделал много хорошего, но пока не прошёл проверку временем в отношении умения удерживать свой энтуазизм, который сейчас, после первых осторожных успехов, очевидно, вырос.
А соблазн лёгкого добавления крутых фич в Оберонах велик.
Если разработчики не видят возражений и возражающих, это не значит, что их нет или не появится, когда незамеченные разработчиками в пылу энтузиазма тонкости вдруг выстрелят на длинных временах.

Иван Денисов писал(а):
По поводу фолдов - ваше субъективное мнение.
Есть, между прочим, законы типографской эстетики, выверенные веками.

А Вы пытаетесь (независимо от осознанного намерения) таким скрытым образом придать объективности Вашему, такому же субъективному мнению.

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

Центру не следует забывать (а они уже забывают), что опросы пользователей, которые проводил Оминк, на первое, с отрывом, место ставили стабильность Блэкбокса.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 55 ]  На страницу 1, 2, 3  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2018, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB