Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
05.02.2013, 15:08
|
|||
---|---|---|---|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API |
|||
#18+
Заинтересовала статья Синхронизация процессов при распараллеливании задачи средствами Caché Event API Но примеров как всегда минимум... А задачка для нас весьма актуальна т.к. один из клиентов переходит на ЦОД, второй закупил достаточно мощные сервера. Всё это стимулирует перейти на "многоджобовое программирование" приложений. Пока планировалось использование "общения" материнского процесса с его "джобами" через глобал(ы) с некой "нашей структурой"... А в статейке применяются "средства Caché Event API", что не могло не заинтересовать. Есть кто уже такое применяет на практике? Хотелось бы тут пообсуждать с примерами и пр... ---------- Cache for Windows (x86-64) 2010.2.3 (Build 702) Tue Feb 15 2011 14:20:27 EST Cache for Windows (x86-64) 2012.1.1 (Build 602) Wed Mar 7 2012 22:36:34 EST ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.02.2013, 15:13
|
|||
---|---|---|---|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API |
|||
#18+
а какая цель многоджобового программирования у вас ? вы бы конвертацию БД сделали многоджобовой. многоджобовость стоит применять при запуске больших процессов обработки или анализа данных, когда процесс может занимать длительное время. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.02.2013, 15:35
|
|||
---|---|---|---|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API |
|||
#18+
krvsaНо примеров как всегда минимум...Каких именно примеров Вам не хватает? krvsaПока планировалось использование "общения" материнского процесса с его "джобами" через глобал(ы) с некой "нашей структурой"...Если данных много, то почему бы и нет. Общие временные данные можно хранить, например, в ^CacheTempUser .jobs($j, ...), так как приватные глобалы для этого не подойдут. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.02.2013, 16:37
|
|||
---|---|---|---|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API |
|||
#18+
DAiMorа какая цель многоджобового программирования у вас ? Уменьшить время "функциональных процессов". Т.к. тесты показали, что на мощном сервере несколько джобов раздельно сделают "задачку" быстрее одного процесса... DAiMorвы бы конвертацию БД сделали многоджобовой. Мы собираемся всё делать многоджобово... ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.02.2013, 16:41
|
|||
---|---|---|---|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API |
|||
#18+
servitКаких именно примеров Вам не хватает? В идеале хотелось бы почитать на русском что вообще делают (с примерами) все методы класса $system.Event... Пример могу предложить такой: - несколько джобов обрабатывают разные данные - основной процесс (ОП) показывает общее состояние на данный момент - ОП отслеживает окончание всех джобов - ОП делает некое завершение по окончании работы всех джобов Вот нечто такое... ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.02.2013, 16:42
|
|||
---|---|---|---|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API |
|||
#18+
DAiMorмногоджобовость стоит применять при запуске больших процессов обработки или анализа данных, когда процесс может занимать длительное время. Спасибо КЕП! ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.02.2013, 16:52
|
|||
---|---|---|---|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API |
|||
#18+
krvsaМы собираемся всё делать многоджобово... вот в этом деле главное не переборщить у вас не так много процессов которые можно решить расспаралеливанием, наверно только отчеты и конвертация но и отчеты можно просто запустить одним процессом и дать пользователю продолжать работать. мы у себя реализовали формирование отчетов параллельный но правда с помощью Ensemble (хотя там все поверх %SYSTEM.Event), на отдельном сервере. ну и плюс мы используем у себя много-серверную конфигурацию на ECP, для распределения пользовательской нагрузки. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.02.2013, 18:53
|
|||
---|---|---|---|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API |
|||
#18+
servit, большое спасибо за интересную ссылку. Тема в свете требований к функционалу современных информационных систем наиважнейшая. Очень приятно, что такие средства есть не тольво в C и Java, но и в Cache. Вот слово только "многоджобовость" как-то режет слух. DAiMor, в вашей (нашей?) компании работал очень сильный специалист Руслан Павлов, с которым Вы наверняка общались (сейчас и он покинул, к сожалению) - так он употреблял более изящный термин - мультитрэдовые приложения. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.02.2013, 19:03
|
|||
---|---|---|---|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API |
|||
#18+
EvLaUyВот слово только "многоджобовость" как-то режет слух. DAiMor, в вашей (нашей?) компании работал очень сильный специалист Руслан Павлов, с которым Вы наверняка общались (сейчас и он покинул, к сожалению) - так он употреблял более изящный термин - мультитрэдовые приложения.Вы осведомлены о том что он покинул компанию, хотя правильнее так "покинул", т.к. на самом деле он типа в отпуске и через 2 недели будет год. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.02.2013, 19:43
|
|||
---|---|---|---|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API |
|||
#18+
Это че за отпуск такой? По уходу за ребенком, что-ли? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.02.2013, 19:56
|
|||
---|---|---|---|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API |
|||
#18+
krvsaПример могу предложить такой: - несколько джобов обрабатывают разные данные - основной процесс (ОП) показывает общее состояние на данный момент - ОП отслеживает окончание всех джобов - ОП делает некое завершение по окончании работы всех джобов Вот нечто такое... ПожалуйстаClass test.task [ Abstract ] { ClassMethod Test(h = 2) { #dim ex As %Exception.AbstractException ##; статусы подзадач s s(-1)="удалена" s s(0)="выполняется" s s(1)="выполнена" ##; имена наших ресурсов (aka подзадач) s n(1)="Задача1" s n(2)="Задача2" ##; общие данные для теста s ^tmp(n(1),1)="а" s ^tmp(n(1),2)="б" s ^tmp(n(1),3)="в" s ^tmp(n(2),4)="г" s ^tmp(n(2),5)="д" s ^tmp(n(2),6)="е" try{ ##; создаём ресурсы и подзадачи f i=1,2 { d $system.Event.Create(n(i)) j ..SubTask(n(i),h) } ##; выдаём текущий статус подзадач ##; ждём завершения всех подзадач s c=0 while (c<2) { f i=1,2 { s r(i)=$system.Event.WaitMsg(n(i),1) s w(i)=$li(r(i),1) w n(i)," ",s(w(i)),", Текущее состояние=",^CacheTempUser.jobs(n(i)),! ##; если подзадача выполнена удаляем ресурс и запоминаем результат if w(i)=1 { s m(i)=$li(r(i),2) d $system.Event.Delete(n(i)) s c=c+1 } } } ##; выдаём окончательный результат f i=1,2 w "Результат для [",n(i),"] = ",m(i),! }catch(ex){ w "Ошибка",!,ex.DisplayString(),! } ##; прибираемся k ^CacheTempUser.jobs k ^tmp } ClassMethod SubTask( n, h) { ##; выполняем суперсложный отчёт ##; временами обновляем текущий статус выполнения s r="" s key=$o(^tmp(n,"")) while (key'="") { s ^CacheTempUser.jobs(n)=key s r=r_^tmp(n,key) s key=$o(^tmp(n,key)) h h } ##; информируем процесс, ожидающий переданный ресурс, о завершении и передаём результат d $system.Event.Signal(n,r) } } ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.02.2013, 20:06
|
|||
---|---|---|---|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API |
|||
#18+
EvLaUyВот слово только "многоджобовость" как-то режет слух.Разве я где-то использовал это слово? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.02.2013, 22:45
|
|||
---|---|---|---|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API |
|||
#18+
Блок А.Н.Это че за отпуск такой? По уходу за ребенком, что-ли? нет, просто отпуск ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.02.2013, 08:15
|
|||
---|---|---|---|
|
|||
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API |
|||
#18+
DAiMorkrvsaМы собираемся всё делать многоджобово... вот в этом деле главное не переборщить у вас не так много процессов которые можно решить расспаралеливанием, наверно только отчеты и конвертация но и отчеты можно просто запустить одним процессом и дать пользователю продолжать работать. . Как потребитель обсуждаемой системы (СОИ СЗН), могу сказатьо только то что просто запуск отчетов одним процессом дело не ускорит, это только освободит терминал, а требуется реально сократить время, по этому их пускать надо паралельными процессами. кроме того есть еще и регистр в котором тоже есть реальная возможность (причем на мой взгляд более выйгрышное) использовать распаралеливание обработки информации ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.02.2013, 10:12
|
|||
---|---|---|---|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API |
|||
#18+
nvpКак потребитель обсуждаемой системы (СОИ СЗН), могу сказать о только то что просто запуск отчетов одним процессом дело не ускорит, это только освободит терминал, а требуется реально сократить время, по этому их пускать надо паралельными процессами. кроме того есть еще и регистр в котором тоже есть реальная возможность (причем на мой взгляд более выйгрышное) использовать распаралеливание обработки информации собственно и я о том же, что регистр и отчеты как долго у вас отчеты выполняются, я так понимаю проблемы со скоростью отчетов наверно на областной базе ? а вот регистр изначально нужно было делать многозадачным, но сразу так делать не стали, тем более что хотя бы эта задача почти не требует серьезных доработок для этого даже сейчас. с отчетами конечно несколько сложнее в силу текущего алгоритма расчета (я думаю, что мало что изменилось за почти 4, которые я уже не в АИРе), хотя вот аналитику проще было бы так омногозадачить. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.02.2013, 10:22
|
|||
---|---|---|---|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API |
|||
#18+
servitПожалуйста Из примера не совсем понятно для чего вообще применять те методы... Только для того, чтобы пользоваться глобалом ^CacheTempUser.jobs(...)? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.02.2013, 10:29
|
|||
---|---|---|---|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API |
|||
#18+
DAiMorтем более что хотя бы эта задача почти не требует серьезных доработок для этого даже сейчас Готов опять поговорить о договоре? Назови срок и сумму. Я договорюсь с начальством... ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.02.2013, 10:44
|
|||
---|---|---|---|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API |
|||
#18+
krvsaDAiMorтем более что хотя бы эта задача почти не требует серьезных доработок для этого даже сейчас Готов опять поговорить о договоре? Назови срок и сумму. Я договорюсь с начальством... эххх, если бы все было так просто, времени то на это нет совсем, своими делами заняться некогда. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.02.2013, 10:47
|
|||
---|---|---|---|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API |
|||
#18+
Такой вопрос... Что вернет Код: vbnet 1.
Если процесс завершился без Код: vbnet 1.
или просто вылетел по ошибке? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.02.2013, 10:50
|
|||
---|---|---|---|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API |
|||
#18+
DAiMorэххх, если бы все было так просто, времени то на это нет совсем, своими делами заняться некогда. Тогда нефик такое писать. А то на свое значит времени нет... За то наше тебе кажется сделать ничего не стоит? Напомню тебе что данный форум читают наши клиенты. И ты т.о. выставляешь нас х/з кем. Де ты сам это сделаешь все без проблем и быстро. А мы всейм составом что-то так и не можем это модернизировать. Это считаешь нормально? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.02.2013, 11:01
|
|||
---|---|---|---|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API |
|||
#18+
Такой вариант Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Тупо висит... ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.02.2013, 11:04
|
|||
---|---|---|---|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API |
|||
#18+
Такой Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Выдаёт три нуля с интервалом в секунду... Т.е. процесс типа работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.02.2013, 11:05
|
|||
---|---|---|---|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API |
|||
#18+
С ошибкой такой же результат... Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.02.2013, 11:06
|
|||
---|---|---|---|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API |
|||
#18+
Есть какой-то "пингующий" метод? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.02.2013, 11:06
|
|||
---|---|---|---|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API |
|||
#18+
krvsaЧто вернет <...> Если процесс завершился без <...> или просто вылетел по ошибке?Что задача всё ещё выполняется, т.е. статус будет равен 0. Вы могли бы просто закомментировать d $system.Event.Signal(n,r) и увидеть это сами. Всё как в жизни: если начальник дал задание подчинённому без сроков, а подчинённый, выполнив его, забыл или не смог об этом уведомить начальника, значит для начальника задача ещё выполняется. В такой ситуации помогают таймауты: если подзадача не вернула результат в отведённый срок, значит что-то пошло не так. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=39&mobile=1&tid=1557232]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
158ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
1ms |
others: | 261ms |
total: | 533ms |
0 / 0 |