OberonCore
https://forum.oberoncore.ru/

Coroutines вместо потоков
https://forum.oberoncore.ru/viewtopic.php?f=31&t=5219
Страница 2 из 3

Автор:  Дмитрий Дагаев [ Среда, 29 Март, 2017 08:48 ]
Заголовок сообщения:  Re: Coroutines вместо потоков

Иван Денисов писал(а):
Цитата:
BB Linux - ucontext_t

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

на sourceforge http://sourceforge.net/projects/ta1/files/co2.0/

Автор:  Дмитрий Дагаев [ Среда, 29 Март, 2017 08:58 ]
Заголовок сообщения:  Re: Coroutines вместо потоков

Иван Денисов писал(а):
Йозеф не разрабатывает пакет, а интегрирует часть ваших наработок в главный дистрибутив. Не пойму, сознательно ли вы вносите путаницу?

Были предложения Josef Templ, которые приемлемы и могут быть добавлены в пакет Co_
Цитата:
The list could look like this:

TYPE
MarkRegion* = POINTER TO ABSTRACT RECORD
prev, next: MarkRegion
END;
PROCEDURE (this: MarkRegion) BeginAdr*(): INTEGER, ABSTRACT
PROCEDURE (this: MarkRegion) EndAdr*(): INTEGER, ABSTRACT;

VAR markRegions: MarkRegion;

PROCEDURE AddMarkRegion*(r: MarkRegion)
PROCEDURE RemoveMarkRegion*(r: MarkRegion)

- Josef


Я эти функции поддержки стека реализовал для BB1.6, а потом увидел другую версию, полностью отвергающую мою реализацию. Все в стиле Microsoft.

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

Автор:  Иван Денисов [ Среда, 29 Март, 2017 09:15 ]
Заголовок сообщения:  Re: Coroutines вместо потоков

Дмитрий Викторович, при всем уважении, я не понимаю Вас на русском. Как Вы хотите, чтобы ваш посыл поняли через переводчик? Сначала хочу понять сам, что Вы хотите сказать, чтобы как-то прокомментировать ссылку.

Автор:  Иван Денисов [ Среда, 29 Март, 2017 09:19 ]
Заголовок сообщения:  Re: Coroutines вместо потоков

Вернемся к "кооперативной многозадачности". Если реализация на WindowsFibers у вас, то это все равно не "параллельное и многопоточное программирование" ведь. Проясните, пожалуйста. Выполнение ведь в одном потоке на одном процессоре?

Автор:  Иван Денисов [ Среда, 29 Март, 2017 09:21 ]
Заголовок сообщения:  Re: Coroutines вместо потоков

Дмитрий Дагаев писал(а):
Были предложения Josef Templ, которые приемлемы и могут быть добавлены в пакет Co_

Я эти функции поддержки стека реализовал для BB1.6, а потом увидел другую версию, полностью отвергающую мою реализацию. Все в стиле Microsoft.

Мы не обсуждаем, что добавить в пакет Co_. Обсуждается как добавить основы работы с сопрограммами в базовый дистрибутив BlackBox.

Автор:  Дмитрий Дагаев [ Среда, 29 Март, 2017 09:49 ]
Заголовок сообщения:  Re: Coroutines вместо потоков

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

При WinApi.SwitchToFiber идет переход к сопрограмме. Это - переключение контекста. Как минимум, старые регистры: счетчик команд и указатель стека сохраняются. И восстанавливаются новые. При переходе с потока на поток тоже происходит переключение контекста. Но контекст у потока больше. А у процесса - еще больше.

Автор:  Иван Денисов [ Среда, 29 Март, 2017 10:22 ]
Заголовок сообщения:  Re: Coroutines вместо потоков

Правильно понимаю, что основной смысл комментария в том, чтобы не пытаться ничего упростить и интегрировать, а использовать Вашу подсистему Co_ в том виде как она есть?

Автор:  Дмитрий Дагаев [ Среда, 29 Март, 2017 10:41 ]
Заголовок сообщения:  Re: Coroutines вместо потоков

Это не комментарий - я провожу свою независимую линию.
Еще раз:
1.Нужно указать, что Coroutines уже добавлена в 2014, но без поддержки от Kernel.
2.Нужно сделать поддержку Kernel, доступную для всех пакетов. Equal opportunities.

Автор:  Иван Денисов [ Среда, 29 Март, 2017 11:24 ]
Заголовок сообщения:  Re: Coroutines вместо потоков

Дмитрий Дагаев писал(а):
1.Нужно указать, что Coroutines уже добавлена в 2014, но без поддержки от Kernel.
2.Нужно сделать поддержку Kernel, доступную для всех пакетов. Equal opportunities.


Это уже понятнее. Так гугл даже смог перевести на английский. https://forum.blackboxframework.org/vie ... 5809#p5809

Прошу вас оценить насколько доступно сейчас в ядре реализована поддержка сопрограмм:
http://blackboxframework.org/unstable/i ... a1.829.zip
Kernel.Coroutine

Автор:  Дмитрий Дагаев [ Среда, 29 Март, 2017 11:31 ]
Заголовок сообщения:  Re: Coroutines вместо потоков

Дмитрий Дагаев писал(а):
в Kernel не должно быть зашито вызовов Windows Fiber только для модуля J Templ: Kernel.InitCoroutines, Kernel.AddCoroutine, Kernel.SetCoroutineBase, Kernel.RemoveCoroutine, Kernel.TransferCoroutine

Автор:  Иван Денисов [ Среда, 29 Март, 2017 12:00 ]
Заголовок сообщения:  Re: Coroutines вместо потоков

Поглядите, пожалуйста, первую реализацию
http://blackboxframework.org/unstable/i ... a1.816.zip
там нет вызовов WInApi в ядре.
Такой вариант будет полезен в равной степени?

Автор:  Илья Ермаков [ Среда, 29 Март, 2017 19:54 ]
Заголовок сообщения:  Re: Coroutines вместо потоков

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


Так это логический параллелизм.
Ваша программная логика выполняется псевдо-параллельно.

Автор:  Иван Денисов [ Среда, 29 Март, 2017 21:38 ]
Заголовок сообщения:  Re: Coroutines вместо потоков

Info21 писал(а):
Иван Денисов писал(а):
Опции - это тоже сложность.
Смотря для кого.

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

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

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

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

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

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


Вот со всем согласен, кроме законов типографской эстетики. Тут они были сознательно нарушены, чтобы складки бросались в глаза. Назовем это художественным приемом.

Думаю, что Вы справедливо в праве подождать пока Центр пройдет испытания временем. Никто особо не подгоняет. Ну а Вы, когда задумаетесь про стабильность, вспомните, что версия 1.7 включает исправление 65 багов: http://blackboxframework.org/stable/bla ... anges.html
Да, 1 серьезный баг был в стабильном выпуске. Но он был обнаружен и исправлен:
http://blackboxframework.org/unstable/m ... anges.html
Может быть при более активном участии сообщества в бета-тестировании, такой проблемы удалось бы избежать.

Автор:  Дмитрий Дагаев [ Среда, 29 Март, 2017 23:30 ]
Заголовок сообщения:  Re: Coroutines вместо потоков

Иван Денисов писал(а):
Поглядите, пожалуйста, первую реализацию
http://blackboxframework.org/unstable/i ... a1.816.zip
там нет вызовов WInApi в ядре.
Такой вариант будет полезен в равной степени?

То, что я вижу - список структур StackInfo для локальных стеков сопрограмм, функции работы с ними InitStacks, AddStackInfo, SetStackBase, RemoveStackInfo, SwitchStackInfo и модификация MarkLocals - меня устраивает.

Автор:  Иван Денисов [ Четверг, 30 Март, 2017 10:55 ]
Заголовок сообщения:  Re: Coroutines вместо потоков

Интересно понять про Transfer и Yeild.

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

Для обсуждения на английском завел тему:
https://community.blackboxframework.org ... f=49&t=165

Автор:  Дмитрий Дагаев [ Четверг, 30 Март, 2017 13:28 ]
Заголовок сообщения:  Re: Coroutines вместо потоков

Я еще сослался на пакет Tasks Ильи Ермакова, без деталей, разумеется, что такой существует, но неопубликован https://community.blackboxframework.org/viewtopic.php?f=49&t=165&p=952#p952.

Автор:  Иван Денисов [ Четверг, 30 Март, 2017 22:02 ]
Заголовок сообщения:  Re: Coroutines вместо потоков

Нашел вашу заметку еще: http://cyberleninka.ru/article/n/ne-tolko-potoki

Автор:  Иван Денисов [ Пятница, 07 Апрель, 2017 22:32 ]
Заголовок сообщения:  Re: Coroutines вместо потоков

Дмитрий Викторович, поясните на русском, пожалуйста. Я никак не могу въехать в чем преимущество сущности планировщика (Task) против обычного действия (Services.Action) ?

Автор:  Дмитрий Дагаев [ Суббота, 08 Апрель, 2017 07:56 ]
Заголовок сообщения:  Re: Coroutines вместо потоков

За один цикл таймера Actions можно вызвать один цикл вычислений, как в ObxActions, а можно несколько. Планировщик SchedTasks вызывает фоновую задачу снова и снова, пока есть время до следующего цикла. У меня разница в 400000 раз.

Автор:  Иван Денисов [ Суббота, 08 Апрель, 2017 13:43 ]
Заголовок сообщения:  Re: Coroutines вместо потоков

Дмитрий Дагаев писал(а):
За один цикл таймера Actions можно вызвать один цикл вычислений, как в ObxActions, а можно несколько. Планировщик SchedTasks вызывает фоновую задачу снова и снова, пока есть время до следующего цикла. У меня разница в 400000 раз.

А что тогда происходит во время срабатывания следующего цикла? Возврат в главную сопрограмму?

Страница 2 из 3 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/