|
Синхронизация процессов при распараллеливании задачи средствами 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 |
|
|
start [/forum/topic.php?fid=39&msg=38139936&tid=1557232]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
152ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 247ms |
total: | 487ms |
0 / 0 |