| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: Общие вопросы > Аналог Coro с сохранением состояния между запускам |
| Автор: Pilat66 22.6.2016, 03:08 |
| Есть имитация многозадачности/многопоточности - Coro. Мне нужно то же самое, с маленьким дополнением: надо сохранять состояние "потоков" на диске, чтобы после вылета программы (или штатной остановки) можно было бы восстановить состояние всех потоков. Нужно это для обработки входящих сообщений от оборудования. Про Ev и подобное я в курсе, это мне не подходит. |
| Автор: noize 2.7.2016, 00:43 |
| я бы посоветовал вам использовать внешнее быстрое хранилище, типа redis. Тут вопрос в том, какие данне надо сохранять. |
| Автор: Pilat66 10.7.2016, 01:56 | ||
Я не очень понимаю как redis мне поможет для сохранения состояния потоков coro |
| Автор: vansevich 6.10.2016, 13:36 | ||
Именно состояние корутин сохранять, не имеет смысла в силу того очень сложно, так как возникают сразу вопросы,- а что делать с файловыми дескрипторами, например. Правильнее, будет весть xlog (binlog) приложения, и писать туда информацию которая поможет восстановить состояние.. |
| Автор: Pilat66 6.10.2016, 21:47 |
| И какие модули позволяют это сделать? |
| Автор: vansevich 6.10.2016, 23:33 |
| Ну поиск по metacpan подсказал Text::XLogfile, но я его не использовал, и даже не знаю работает ли он. По описанию подходит. Но, в тоже время xlog(журнал транзакций) в основном юзают в бд..Не уверен что лучший выбор для хранения состояния приложения. Вообще тема сложная, сложность реализации восстановления состояния, поэтому тут надо знать, что за приложение, о чем речь, и почему например просто не хранить данные в бд.=) |
| Автор: Pilat66 7.10.2016, 03:05 |
| Мне нужно готовое решение. Доделать Coro не представляется возможным, а самопальный вариант я уже сделал. Получилось похожее на Coro, но чисто перловой решение. Проблему с дескрипторами решил просто - открываю базу данных заново после запуска, а как ещё? Coro выбрано не случайно - в нём много чего сделано, в отличии от моей суперкооперативной многозадачности. |
| Автор: vansevich 7.10.2016, 11:34 |
| Такого решения нет, к сожалению |
| Автор: Pilat66 7.10.2016, 14:25 |
| Это довольно странно, так как в перле есть довольно специфический оператор goto , который позволяет именно на коленке сделать многозадачность с сохранением состояния. |
| Автор: vansevich 7.10.2016, 20:17 |
| Мне кажется, вы немного путаете теплое с мягким, goto оператор безусловного перехода, да через него можно реализовать как бы "корутины". Но сохранение состояния именно корутин, это совсем другая вещь. Готового решения нет. Ну или подумайте как можно обойтись без этого. Не зная какая у вас исходная задача, сложно что либо предложить Вам. В первом сообщении Вы писали про EV - ну, он тут вообще не причем, это просто ивентлуп |