Русскоязычное программирование

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



Практический смысл корутинов

Сообщений 1 страница 30 из 34

1

Не думаю, что можно. В лиспе мы всем ЛОРом не смогли, хотя в лиспе более мощные исключения, чем в Дельфи. ,Почитайте на Хабре про async и callback hell, если не в курсе.

Меня интересуют практические примеры, которые бы показывали, что данный инструмент, во-первых, удобней, во-вторых, вообще нужен. Это вопрос не к буденну конкретно, а вообще.

Еще масла в огонь. Я вот немного почитал там и в основном примеры жиденькие либо заумные. Самый адекватный пример - это взаимодействие множества одновременно работающих и независимых объектов. Ну хорошо, я открываю например, Скретч. Там классика со времен Смоллтолка - объекты, события и сообщения. В Скретче отлично получается:
а) создавать много объектов и прямое применение данному процессу - игры
б) обходиться без всяких корутинов
в) учить всему этому детей

Не то, чтобы я против. Если людям нравится, пусть пользуются. Вопрос скорее, чего там такого магического?

0

2

почитал википедию, там пишут, что какая-то маргинальная (ненужная) фича, цитирую:
https://en.wikipedia.org/wiki/Cooperative_multitasking

it is rarely used in modern larger systems
...
In a server environment, this is a hazard that makes the entire environment unacceptably fragile.


used in memory-constrained embedded systems
...
is used with await in languages with a single-threaded event-loop in their runtime, like JavaScript or Python.


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

В другой статье, сову всё-таки обосновали:
https://en.wikipedia.org/wiki/Fiber_(computer_science)

an M:N threading model with no more preemptive threads than CPU cores can be more efficient than either pure fibers or pure preemptive threading.

Однако мы-то знаем, что верить нельзя никому.

Думаю продолжать искать надо где-то в доказательном программировании, чтобы не рисковать (не рисковать зависнуть в чужой корутине).

Если бы такой язык программирования, гарантирующий корректность добровольной многозадачности, существовал бы - это был бы прорыв. Но я думаю, что warp-драйв изобретут быстрее.

Отредактировано Лис (2018-11-02 14:25:58)

0

3

Копай, Лис, дальше. В конце-то концов, должна быть и от тебя какая-то польза.

0

4

budden написал(а):

Копай, Лис, дальше. В конце-то концов, должна быть и от тебя какая-то польза.

Иди-ка ты к себе на форум и ТАМ пиши, какое Лис
http://remdev.org/viewtopic.php?id=297#p2960

хамло редкостное

Отредактировано Лис (2018-11-02 14:38:48)

0

5

utkin написал(а):

Вопрос скорее, чего там такого магического?

Это вопрос о классификации goto. Неклассифицированный goto это же ай-ай-ай.

0

6

С другой стороны, существует ведь Метроном (это алгоритм реалтаймовой сборки мусора). Значит можно-таки обеспечить компилятором остановки при заданных ограничениях. Копать действительно есть куда.

Отредактировано Лис (2018-11-02 14:55:24)

0

7

Вот. Копать есть куда. Если тебе Бог не дал быть программистом - это не беда. Ты всё равно можешь найти для себя полезное дело. Вот я и подумал - вдруг копать этот вопрос - дело как раз для тебя? Тебе и посоветовал. Т.е. хоть это и выглядит хамством, но по сути я вполне доброжелателен. А я в освободившееся время переведу ещё 2-3 идентификатора. Удачи!

А форума у меня пока что нет. Это не форум получается пока что, а так - записная книжка.

Отредактировано budden (2018-11-02 15:00:18)

0

8

budden написал(а):

выглядит хамством, но по сути я вполне доброжелателен.

Если доброжелателен, делай так, чтобы не выглядело. А так оно не только хамство, но и глумление.

0

9

Постараюсь. Я вообще сейчас довольно злой в целом.

0

10

Это вопрос о классификации goto. Неклассифицированный goto это же ай-ай-ай.

Полно же цивилизованных Goto. Можно обратиться к объекту через публичный метод.

С другой стороны, существует ведь Метроном (это алгоритм реалтаймовой сборки мусора). Значит можно-таки обеспечить компилятором остановки при заданных ограничениях. Копать действительно есть куда.

Берете таймер и генерируете по нему исключения, в которых будет сборка мусора. Все? Я решил Ваш вопрос? Вариант 2 - вызывать сборку мусора только когда это реально нужно.

0

11

utkin написал(а):

Берете таймер ... Я решил Ваш вопрос?

Вы ничего не поняли, Уткин, из написанного выше по топику.

Я писал, что вся идея добровольной многозадачности состоит в том, чтобы организовать её добровольно, без переключений контекстов нитей. А Ваш таймер - это прерывание (как раз то самое переключение, от которого хоитм избавится). Не говоря уже про то, что Метроном работает не так. Да и кроме метронома есть работы по обеспечению возможности остановки на любой инструкции.

Грубо говоря есть два способа обеспечения гарантий при многозадачности - первый практический проработанный с синхронизационными примитиваим, и второй теоретический - с корутинами и поддержкой компилятора. Будден ехидно думает, что он знает что-то особое о том, что Оберон так умел ещё в ДОС, а глупенький Лис об этом не знает. Но тут не тот случай.

0

12

Я не всегда думаю ехидно. В данном случае я вообще не думаю, просто экономлю своё время. Можете доложить публике, за счёт чего "метроном" так работает?

0

13

utkin написал(а):

Полно же цивилизованных Goto

Это вопросы ручной оптимизации.

0

14

А Ваш таймер - это прерывание (как раз то самое переключение, от которого хоитм избавится).

А зачем от него избавляться? Конечно не понял, потому что меня всегда интересует не сферический конь в вакууме, а реальное применение в бою. А тут шарик и три стаканчика на стуле. Опять же в заголовке темы был Скретч у которого нет корутинов. И там все прекрасно параллельно. И это  в детской системе между прочим.

и второй теоретический - с корутинами и поддержкой компилятора

То есть и здесь ложки нет. Очередное разочарование.

Это вопросы ручной оптимизации.

Все так же из чугуна и хрена?

Отредактировано utkin (2018-11-02 19:41:59)

0

15

utkin написал(а):

Все так же из чугуна и хрена?

Время работы - измеряемая величина.

0

16

utkin написал(а):

А зачем от него избавляться?

Чтобы сэкономить несколько процентов производительности.

utkin написал(а):

Скретч у которого нет корутинов. И там все прекрасно параллельно.

есть, только они там называются green threads и их производительность спорная:
https://ru.wikipedia.org/wiki/Green_threads

Green threads значительно превосходят встроенные потоки Linux-системы по времени активации потоков и синхронизации.
Встроенные потоки Linux имеют несколько более высокую производительность операций ввода-вывода и переключения контекста.

0

17

есть, только они там называются green threads

Где это Вы узнали, что это есть в Скретч?

Чтобы сэкономить несколько процентов производительности.

Пока только в теории. Ну хорошо, вариант 2 - реализация через методы объектов? Вызываете функцию в нужное время в нужном месте. Какие проблемы?

0

18

utkin написал(а):

Где это Вы узнали, что это есть в Скретч?

В википедии прочитал, и сделал пару необоснованных предположений.

utkin написал(а):
Лис написал(а):

сэкономить несколько процентов производительности.

Пока только в теории.

Верно. Но мечтать и дерзать это нормально.

utkin написал(а):

Ну хорошо, вариант 2 - реализация через методы объектов?
Вызываете функцию в нужное время в нужном месте. Какие проблемы?

Программирование - это способы организации кода. Тут один способ, там другой способ.
Ну вот кажется им (и мне тоже), что будет чуть быстрее, почему не пройти по этому пути до получения результатов замеров?

Отредактировано Лис (2018-11-03 06:55:54)

0

19

В википедии прочитал, и сделал пару необоснованных предположений.

В том же Дебиане есть несколько реализаций Смолтолка. Надо читать конкретно за Сквик на котором написан Скретч.

Верно. Но мечтать и дерзать это нормально.

Ресурсами рулит ОСь и как она захочет так и будет. Корутинами проблему решить здесь нельзя.

Программирование - это способы организации кода. Тут один способ, там другой способ.

Посылка сообщений объектам это нормальный цивилизованный метод, в котором уменьшается связность кода и, следовательно, уменьшается количество ошибок.

Ну вот кажется им (и мне тоже), что будет чуть быстрее, почему не пройти по этому пути до получения результатов замеров?

Основная проблема современных программ не скорость, а логические ошибки. Корутины уменьшают количество ошибок или добавляют вероятность возникновения новых?

Отредактировано utkin (2018-11-03 07:13:13)

0

20

utkin
Обработка сообщений не уменьшает связноть. А на против её увеличивает так как приходится тащить все связи от предка.
Вот идея сигналов/слотов уменьшает связность.

Сообщения это самый простой способ создать синхронизацию для много ядерных, много процессорных систем.
Сигналы/слоты - идея обмена информацией через контролируемые точки обмена считается безопасной. Это ещё в языке Ада было придумано. Однако даже в QT есть не доработки в плане многозадачости.

utkin написал(а):

или добавляют вероятность возникновения новых?

Асинхронные цепи в VHDL считаются наиболее опасными по количеству ошибок.

utkin написал(а):

Пока только в теории. Ну хорошо, вариант 2 - реализация через методы объектов? Вызываете функцию в нужное время в нужном месте. Какие проблемы?

В виндоусе нет таймера ниже 1 мс. На уровне хака можно получить 0,25 мс это очень много.
Поэтому все и изобретают APC, Сигналы, корутины и прочие асинхронные методы.

0

21

Павиа написал(а):

Поэтому все и изобретают APC, Сигналы, корутины и прочие асинхронные методы.

Что такое APC?

APIC ?
https://en.wikipedia.org/wiki/Advanced_ … Controller

0

22

Лис
APC (asynchronous procedure call)  - механизм вызова колбэк функций асинхронно к основному потоку.  Динамическая бибилтотека при инициализации создаёт свой поток либо ядро использует свой поток. И код APC функции будет выполняться в этом потоке, а не в основном.
https://lawbooks.news/windows_952/prery … 53878.html

0

23

Обработка сообщений не уменьшает связноть. А на против её увеличивает так как приходится тащить все связи от предка.
Вот идея сигналов/слотов уменьшает связность.

Сообщения это вызов той же функции. Синтаксис отличается и все. А функция это удобный способ инкапсуляции. Делаете максимально универсальные функции, не зависящие от контекста и нет проблем.

Однако даже в QT есть не доработки в плане многозадачости.

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

В виндоусе нет таймера ниже 1 мс. На уровне хака можно получить 0,25 мс это очень много.
Поэтому все и изобретают APC, Сигналы, корутины и прочие асинхронные методы.

Так это проблема реализации, а не проблема теории и языков. Так и надо говорить - все работает через задницу, но вот Вам всем костыль. Может быть у Вас получится с его помощью бегать.
Поэтому вывод прост: искать другой алгоритм сборки мусора.

0

24

utkin написал(а):

Делаете максимально универсальные функции, не зависящие от контекста и нет проблем.

Это делетанство. Мой препод по волейболу, рассуждал примерно как вы. Вот вы математик? Значит с векторами работать умете. Бегать умете. Значит вам просто надо изменить вектор, что бы побежать в верх по стене на 10 м.  :D

Отредактировано Павиа (2018-11-03 09:06:35)

0

25

utkin написал(а):

Так это проблема реализации, а не проблема теории и языков.

Так именно инженерные ограничения и заставляют рождать теории. Иначе эти теории никому и не нужны будут.

0

26

Но это именно так и работает. Посмотрите на библиотеки, там тоже максимально универсальные функции. Посмотрите на языки программирования. Там ведь нет всего и вся. А только базовый универсальный набор фишек и не больше. Хотя добавление встроенных функций в язык это, вообще говоря, плевое дело, особенно, если используется встроенный тип данных.

0

27

utkin написал(а):

искать другой алгоритм сборки мусора.

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

0

28

Лис

Лис написал(а):

А в целом корутины они вообще для реализации многозадачности,

Скорее это синтаксический скахар для того что-бы программистам было проще уложить многозадачность у себя в голове. А так асинхронный вызов функций реализуется даже без расширения синтаксиса.
Правда я бы это развил, не помню зачем. Но каждая функция должна иметь свой глобальный набор данных. Тогда можно будет планировать и упралвлять многозадачностью да и сборкой мусора.
А так как ни в одной реализации этого нет то проблемы.

utkin написал(а):

Но это именно так и работает. Посмотрите на библиотеки, там тоже максимально универсальные функции.

Вот откройте и сами посмотрите.

0

29

Так именно инженерные ограничения и заставляют рождать теории.

Я всегда думал они рождают практику (причем, как правило, порочную) из-за которой потом мыши вынуждены жрать кактусы вместо нормальной колбасы.

сборка мусора там была просто как пример решения схожей проблемы разбиения процесса выполнения на маленькие короткие по времени фрагменты.

В целом я считаю, что для сборки мусора без корутин как дерево без гусеницы.

Вот откройте и сами посмотрите.

Смотрю и вижу. Половина библиотек вообще слои абстракции, в которых программер плавно отдаляется от подробностей и зависимостей железа и частных проблем задач.

Отредактировано utkin (2018-11-03 09:34:36)

0

30

utkin написал(а):

несколько реализаций Смолтолка

Который жутко медленный.

Основная проблема современных программ не скорость, а логические ошибки.

Это вообще не проблема программ. Это проблема квалификации разработчиков.

utkin написал(а):

ксимально универсальные функции, не зависящие от контекста и нет проблем.

Это в теории. На практике такие функции не нужны, нужно наоборот. Потому что оптимизация кода по одному критерию делает программы непригодными к работе.

utkin написал(а):

Посмотрите на библиотеки, там тоже максимально универсальные функции.

Нет их там. Какие библиотеки? Везде в системах куча контекста и документации о соглашениях в поведении. А вызовы функций с макс. короткими параметрами.

Отредактировано MihalNik (2018-11-03 14:45:23)

0