|
Синхронизация процессов при распараллеливании задачи средствами 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:08 |
|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
|
|||
---|---|---|---|
#18+
а какая цель многоджобового программирования у вас ? вы бы конвертацию БД сделали многоджобовой. многоджобовость стоит применять при запуске больших процессов обработки или анализа данных, когда процесс может занимать длительное время. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2013, 15:13 |
|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
|
|||
---|---|---|---|
#18+
krvsaНо примеров как всегда минимум...Каких именно примеров Вам не хватает? krvsaПока планировалось использование "общения" материнского процесса с его "джобами" через глобал(ы) с некой "нашей структурой"...Если данных много, то почему бы и нет. Общие временные данные можно хранить, например, в ^CacheTempUser .jobs($j, ...), так как приватные глобалы для этого не подойдут. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2013, 15:35 |
|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
|
|||
---|---|---|---|
#18+
DAiMorа какая цель многоджобового программирования у вас ? Уменьшить время "функциональных процессов". Т.к. тесты показали, что на мощном сервере несколько джобов раздельно сделают "задачку" быстрее одного процесса... DAiMorвы бы конвертацию БД сделали многоджобовой. Мы собираемся всё делать многоджобово... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2013, 16:37 |
|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
|
|||
---|---|---|---|
#18+
servitКаких именно примеров Вам не хватает? В идеале хотелось бы почитать на русском что вообще делают (с примерами) все методы класса $system.Event... Пример могу предложить такой: - несколько джобов обрабатывают разные данные - основной процесс (ОП) показывает общее состояние на данный момент - ОП отслеживает окончание всех джобов - ОП делает некое завершение по окончании работы всех джобов Вот нечто такое... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2013, 16:41 |
|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
|
|||
---|---|---|---|
#18+
DAiMorмногоджобовость стоит применять при запуске больших процессов обработки или анализа данных, когда процесс может занимать длительное время. Спасибо КЕП! ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2013, 16:42 |
|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
|
|||
---|---|---|---|
#18+
krvsaМы собираемся всё делать многоджобово... вот в этом деле главное не переборщить у вас не так много процессов которые можно решить расспаралеливанием, наверно только отчеты и конвертация но и отчеты можно просто запустить одним процессом и дать пользователю продолжать работать. мы у себя реализовали формирование отчетов параллельный но правда с помощью Ensemble (хотя там все поверх %SYSTEM.Event), на отдельном сервере. ну и плюс мы используем у себя много-серверную конфигурацию на ECP, для распределения пользовательской нагрузки. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2013, 16:52 |
|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
|
|||
---|---|---|---|
#18+
servit, большое спасибо за интересную ссылку. Тема в свете требований к функционалу современных информационных систем наиважнейшая. Очень приятно, что такие средства есть не тольво в C и Java, но и в Cache. Вот слово только "многоджобовость" как-то режет слух. DAiMor, в вашей (нашей?) компании работал очень сильный специалист Руслан Павлов, с которым Вы наверняка общались (сейчас и он покинул, к сожалению) - так он употреблял более изящный термин - мультитрэдовые приложения. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2013, 18:53 |
|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
|
|||
---|---|---|---|
#18+
EvLaUyВот слово только "многоджобовость" как-то режет слух. DAiMor, в вашей (нашей?) компании работал очень сильный специалист Руслан Павлов, с которым Вы наверняка общались (сейчас и он покинул, к сожалению) - так он употреблял более изящный термин - мультитрэдовые приложения.Вы осведомлены о том что он покинул компанию, хотя правильнее так "покинул", т.к. на самом деле он типа в отпуске и через 2 недели будет год. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2013, 19:03 |
|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
|
|||
---|---|---|---|
#18+
Это че за отпуск такой? По уходу за ребенком, что-ли? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2013, 19:43 |
|
Синхронизация процессов при распараллеливании задачи средствами 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, 19:56 |
|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
|
|||
---|---|---|---|
#18+
EvLaUyВот слово только "многоджобовость" как-то режет слух.Разве я где-то использовал это слово? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2013, 20:06 |
|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
|
|||
---|---|---|---|
#18+
Блок А.Н.Это че за отпуск такой? По уходу за ребенком, что-ли? нет, просто отпуск ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2013, 22:45 |
|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
|
|||
---|---|---|---|
#18+
DAiMorkrvsaМы собираемся всё делать многоджобово... вот в этом деле главное не переборщить у вас не так много процессов которые можно решить расспаралеливанием, наверно только отчеты и конвертация но и отчеты можно просто запустить одним процессом и дать пользователю продолжать работать. . Как потребитель обсуждаемой системы (СОИ СЗН), могу сказатьо только то что просто запуск отчетов одним процессом дело не ускорит, это только освободит терминал, а требуется реально сократить время, по этому их пускать надо паралельными процессами. кроме того есть еще и регистр в котором тоже есть реальная возможность (причем на мой взгляд более выйгрышное) использовать распаралеливание обработки информации ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 08:15 |
|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
|
|||
---|---|---|---|
#18+
nvpКак потребитель обсуждаемой системы (СОИ СЗН), могу сказать о только то что просто запуск отчетов одним процессом дело не ускорит, это только освободит терминал, а требуется реально сократить время, по этому их пускать надо паралельными процессами. кроме того есть еще и регистр в котором тоже есть реальная возможность (причем на мой взгляд более выйгрышное) использовать распаралеливание обработки информации собственно и я о том же, что регистр и отчеты как долго у вас отчеты выполняются, я так понимаю проблемы со скоростью отчетов наверно на областной базе ? а вот регистр изначально нужно было делать многозадачным, но сразу так делать не стали, тем более что хотя бы эта задача почти не требует серьезных доработок для этого даже сейчас. с отчетами конечно несколько сложнее в силу текущего алгоритма расчета (я думаю, что мало что изменилось за почти 4, которые я уже не в АИРе), хотя вот аналитику проще было бы так омногозадачить. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 10:12 |
|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
|
|||
---|---|---|---|
#18+
servitПожалуйста Из примера не совсем понятно для чего вообще применять те методы... Только для того, чтобы пользоваться глобалом ^CacheTempUser.jobs(...)? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 10:22 |
|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
|
|||
---|---|---|---|
#18+
DAiMorтем более что хотя бы эта задача почти не требует серьезных доработок для этого даже сейчас Готов опять поговорить о договоре? Назови срок и сумму. Я договорюсь с начальством... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 10:29 |
|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
|
|||
---|---|---|---|
#18+
krvsaDAiMorтем более что хотя бы эта задача почти не требует серьезных доработок для этого даже сейчас Готов опять поговорить о договоре? Назови срок и сумму. Я договорюсь с начальством... эххх, если бы все было так просто, времени то на это нет совсем, своими делами заняться некогда. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 10:44 |
|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
|
|||
---|---|---|---|
#18+
Такой вопрос... Что вернет Код: vbnet 1.
Если процесс завершился без Код: vbnet 1.
или просто вылетел по ошибке? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 10:47 |
|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
|
|||
---|---|---|---|
#18+
DAiMorэххх, если бы все было так просто, времени то на это нет совсем, своими делами заняться некогда. Тогда нефик такое писать. А то на свое значит времени нет... За то наше тебе кажется сделать ничего не стоит? Напомню тебе что данный форум читают наши клиенты. И ты т.о. выставляешь нас х/з кем. Де ты сам это сделаешь все без проблем и быстро. А мы всейм составом что-то так и не можем это модернизировать. Это считаешь нормально? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 10:50 |
|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
|
|||
---|---|---|---|
#18+
Такой вариант Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Тупо висит... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 11:01 |
|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
|
|||
---|---|---|---|
#18+
Такой Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Выдаёт три нуля с интервалом в секунду... Т.е. процесс типа работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 11:04 |
|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
|
|||
---|---|---|---|
#18+
С ошибкой такой же результат... Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 11:05 |
|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
|
|||
---|---|---|---|
#18+
Есть какой-то "пингующий" метод? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 11:06 |
|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
|
|||
---|---|---|---|
#18+
krvsaЧто вернет <...> Если процесс завершился без <...> или просто вылетел по ошибке?Что задача всё ещё выполняется, т.е. статус будет равен 0. Вы могли бы просто закомментировать d $system.Event.Signal(n,r) и увидеть это сами. Всё как в жизни: если начальник дал задание подчинённому без сроков, а подчинённый, выполнив его, забыл или не смог об этом уведомить начальника, значит для начальника задача ещё выполняется. В такой ситуации помогают таймауты: если подзадача не вернула результат в отведённый срок, значит что-то пошло не так. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 11:06 |
|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
|
|||
---|---|---|---|
#18+
servitkrvsaЧто вернет <...> Если процесс завершился без <...> или просто вылетел по ошибке?Что задача всё ещё выполняется, т.е. статус будет равен 0. Вы могли бы просто закомментировать d $system.Event.Signal(n,r) и увидеть это сами. Всё как в жизни: если начальник дал задание подчинённому без сроков, а подчинённый, выполнив его, забыл или не смог об этом уведомить начальника, значит для начальника задача ещё выполняется. В такой ситуации помогают таймауты: если подзадача не вернула результат в отведённый срок, значит что-то пошло не так. Бывают ситуации когда подзадачи в зависимости от входных параметров могут выполняться по разному долго, и в таком случае корректно определить таймаут не получится. особенно когда критично время выполнения. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 11:13 |
|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
|
|||
---|---|---|---|
#18+
servit, авторРазве я где-то использовал это слово? ну что вы, вторая часть моего сообщения уже не имела индивидуальной адресности. Я имел в виду употребление этого слова другими участниками форума. Недоразумение. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 11:33 |
|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
|
|||
---|---|---|---|
#18+
EvLaUyтак он употреблял более изящный термин - мультитрэдовые приложения. thread (с англ.) - нить, поток. Cache не создает потоков, а создает процесс. По сему, это изящный термин здесь не применим :) А применим, как раз таки, многопроцессное, мультипроцессное ну или мультиджобовое (или так multijobs) приложение :) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 11:41 |
|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
|
|||
---|---|---|---|
#18+
servitВсё как в жизни ... Это больше смахивает на курьёз... Что-то большего я ждал от тех методов. Думал хоть контролем они нам смогут помочь, ан нет... Т.о. тайный смысл их создания так и остался для меня вопросом - зачем их делали? В чём их тайный смысл? Зачем они, если можно и без них? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 11:52 |
|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
|
|||
---|---|---|---|
#18+
П.С.М., как говорится, любой спор - это спор о терминах. Вы так "по-профессорски" попытались тут всем всё объяснить, но позвольте с Вами не согласиться. Ведь это смотря что понимать под словом "процесс". Общепринято процесс - это реалия на уровне операционной системы, запись о которой выдается, например, командой "ps -el". Это - процессы. И когда мы говорим о средствах межпроцессного взаимодействия (семафоры, обменники, сегменты общей памяти), то слово "процесс" употребляется здесь именно в этом смысле. Очевидно, что поток выполнения, создаваемый новой командой job, не обладает свойствами процесса в указанном выше смысле и является реалией не на уровне операционной системы, а остается внутри самого Cache. И в этом отношении к нему больше подходит определение не процесса, а именно отдельного потока исполнения команд. И для них - опять-таки на уровне библиотек приложения (Java или Cache), а не на уровне ОС применяются специальные средства синхронизации. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 12:08 |
|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
|
|||
---|---|---|---|
#18+
krvsaС ошибкой такой же результат...Caché предоставляет инструменты для обработки тех или иных ситуаций, и от программиста зависит то, как он ими воспользуется. Если в подзадаче всегда может возникнуть ошибка, то следует обрамить защищаемый код в try-catch, и Signal() вызовется в любом случае (аналог раздела finally). Если процесс подзадачи кто-то принудительно завершил, то можно проверить из основного процесса наличие подпроцесса ##CLASS(%SYS.ProcessQuery).%ExistsId() или воспользоваться JOB^%ZSTOP. krvsaЗачем они, если можно и без них?Если можете без них, не используйте. PS: остаётся ещё надежда на примеры от AlexKB : 7933658 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 12:13 |
|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
|
|||
---|---|---|---|
#18+
EvLaUy, в пользу своей точки зрения, могу привести три аргумента: 1. обсуждаемая здесь статьяСразу стоит отметить, что команда JOB в версии СУБД Caché для Windows порождает не поток, а процесс. Поэтому правильнее было бы говорить не о многопоточном, а о многопроцессном приложении. 2. документацияJOB can create a local process on your local system, or it can invoke the creation of a remote process on another system. 3. Личный опыт. Отсюда же полностью согласен с утверждением: автордля Caché более важно в процессоре количество ядер, чем наличие технологии Hyper-Threading как-то так :) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 12:33 |
|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
|
|||
---|---|---|---|
#18+
П.С.М., цитируемый мной специалист писал мультитрэдовые приложения на Cache задолго до появления обсуждаемой здесь статьи. И выявил, кстати, немало трудновоспроизводимых ошибок Cache, в каждой из которых сумел в итоге убедить WRC. Так что надежность описываемых средств - во многом и его заслуга. Я же не навязываю эту точку зрения как единственно правильную. Кому как нравится - так и называет, главное, чтобы не очень далеко было по смыслу от того, ЧТО этим термином называется. В данном случае считаю - не слишком далеко. В конце концов, какой-то термин устоится, дальше если будет не самым правильным. Лошадиная сила, как известно, обозначает такую мощность, которую одна нормальная лошадь дать не может. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 12:57 |
|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
|
|||
---|---|---|---|
#18+
EvLaUyП.С.М., ... Кому как нравится - так и называет, главное, чтобы не очень далеко было по смыслу от того, ЧТО этим термином называется. В данном случае считаю - не слишком далеко. золотые слова ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 13:02 |
|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
|
|||
---|---|---|---|
#18+
EvLaUyцитируемый мной специалист писал мультитрэдовые приложения на Cache задолго до появления обсуждаемой здесь статьи. Есть русское название: многопоточность. Зачем что-то придумывать и добавлять лишние англицизмы? Их вроде и так более чем. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 13:29 |
|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
|
|||
---|---|---|---|
#18+
servitможно проверить из основного процесса наличие подпроцесса ##CLASS(%SYS.ProcessQuery).%ExistsId() О! Спасибо. А что там является ИДшником процесса? Сам-то джоб имеет уникальное значение $J... Но материнский процесс его не "знает", у него своё значение у $J. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 13:37 |
|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
|
|||
---|---|---|---|
#18+
servitЕсли можете без них, не используйте. Так в том-то и интерес - есть ли в них (тех методах) нечто полезное. Пока ничего особенного не видно... Разве что рисонуться новым синтаксисом. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 13:42 |
|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
|
|||
---|---|---|---|
#18+
imdbЕсть русское название: многопоточность. Опять возвращаемся к вопросу "что есть поток?"... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 13:44 |
|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
|
|||
---|---|---|---|
#18+
krvsaА что там является ИДшником процесса? Сам-то джоб имеет уникальное значение $J... Но материнский процесс его не "знает", у него своё значение у $J. $ZCHILD imdbЕсть русское название: многопоточность. Зачем что-то придумывать и добавлять лишние англицизмы? Их вроде и так более чем.Можно ли назвать приложение по праву многопоточным, если на самом деле создаются несколько процессов, в каждом из которых лишь один поток? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 13:59 |
|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
|
|||
---|---|---|---|
#18+
servit $ZCHILD Спасибо! Вот такое уже работает как нужно. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
И без излишеств... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 14:06 |
|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
|
|||
---|---|---|---|
#18+
krvsaОпять возвращаемся к вопросу "что есть поток?"... servitМожно ли назвать приложение по праву многопоточным, если на самом деле создаются несколько процессов, в каждом из которых лишь один поток? Мое сообщение относится к понятию "мультитрэдовые", что есть английский вариант понятия "многопоточность". Не более того. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 14:41 |
|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
|
|||
---|---|---|---|
#18+
imdbМое сообщение относится к понятию "мультитрэдовые" Ясно... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 14:44 |
|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
|
|||
---|---|---|---|
#18+
servitЕсли процесс подзадачи кто-то принудительно завершил, то можно проверить из основного процесса наличие подпроцесса ##CLASS(%SYS.ProcessQuery).%ExistsId() или воспользоваться JOB^%ZSTOPДля контроля "живости" процесса ещё можно использовать $d(^$job(childPID). А вот JOB^%ZSTOP я не стал бы пользоваться, так как при аварийном завершении процесса на уровне ОС эта точка входа не вызывается. krvsaИ без излишеств...Правильно, только вместе с водой ты выплеснул... и новый механизм обмена сообщениями между процессами, которым, ИМХО, как раз и интересен класс %SYSTEM.Event. С синхронизацией процессов и Lock отлично справляется. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 14:46 |
|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
|
|||
---|---|---|---|
#18+
Alexey Maslovтолько вместе с водой ты выплеснул... и новый механизм обмена сообщениями между процессами, которым, ИМХО, как раз и интересен класс %SYSTEM.Event Чем плохо "общение" через глобал? Т.о. я могу написать любое количество информации в "удобочитаемой" форме, а не выгрызать её из листбилда, а потом разбирать через разделители или тот же листбилд... Или "общение" через методы класса будут лучше? Т.е. опять - в чем преимущество? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 14:52 |
|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
|
|||
---|---|---|---|
#18+
krvsa, да ничем оно не плохо, просто в %SYSTEM.Event просматривается механизм обмена сообщениями с очередями, а на глобалах его надо писать самому, "ручками". ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 14:58 |
|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
|
|||
---|---|---|---|
#18+
Alexey Maslovпросто в %SYSTEM.Event просматривается механизм обмена сообщениями с очередями Так-то оно так... Мне так же понравился результат этого примера из статьи Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Выводит Код: vbnet 1. 2. 3. 4.
Но как бы было хорошо, если бы в Код: vbnet 1.
помимо servit##; статусы подзадач s s(-1)="удалена" s s(0)="выполняется" s s(1)="выполнена" был бы "отсутствует" или "прерван"... Тогда я, я натюрлих! Почему бы такое не использовать. Ан нет! ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 15:05 |
|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
|
|||
---|---|---|---|
#18+
Alexey Maslovна глобалах его надо писать самому, "ручками". Но ведь общение "одной строкой" и в листбидде не такое уш продвинутое. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 15:07 |
|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
|
|||
---|---|---|---|
#18+
вместо Код: plaintext
Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 15:08 |
|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
|
|||
---|---|---|---|
#18+
DAiMorвместо Код: plaintext
Код: plaintext
Я тоже так буду делать, обещаю! ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 15:10 |
|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
|
|||
---|---|---|---|
#18+
krvsa , Вы путаете обмен данными и синхронизацию (обмен сообщениями). %SYSTEM.Event не предназначен для обмена данными. Вряд ли в строку поместится много неструктурированной информации. krvsaНо как бы было хорошо, если быНапишите в WRC. DAiMorвместо Код: plaintext
Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 15:53 |
|
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
|
|||
---|---|---|---|
#18+
Немного потестил и вижу, что погорячился насчёт очередей. Их в готовом виде как раз нет (да никто и не обещал :). Сообщение теряется, если предыдущее ещё не прочитано получателем. Поэтому, если процесс должен отправить несколько сообщений, надо обязательно проверять статус отправки каждого из них. Как-то так: Код: javascript 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 16:02 |
|
|
start [/forum/topic.php?all=1&fid=39&tid=1557232]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
162ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
85ms |
get tp. blocked users: |
2ms |
others: | 259ms |
total: | 554ms |
0 / 0 |