powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
25 сообщений из 52, страница 2 из 3
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
    #38139564
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitkrvsaЧто вернет
<...>
Если процесс завершился без
<...>
или просто вылетел по ошибке?Что задача всё ещё выполняется, т.е. статус будет равен 0.
Вы могли бы просто закомментировать d $system.Event.Signal(n,r) и увидеть это сами.

Всё как в жизни: если начальник дал задание подчинённому без сроков, а подчинённый, выполнив его, забыл или не смог об этом уведомить начальника, значит для начальника задача ещё выполняется.
В такой ситуации помогают таймауты: если подзадача не вернула результат в отведённый срок, значит что-то пошло не так.
Бывают ситуации когда подзадачи в зависимости от входных параметров могут выполняться по разному долго, и в таком случае корректно определить таймаут не получится. особенно когда критично время выполнения.
...
Рейтинг: 0 / 0
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
    #38139595
EvLaUy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servit,
авторРазве я где-то использовал это слово?
ну что вы, вторая часть моего сообщения уже не имела индивидуальной адресности. Я имел в виду употребление этого слова другими участниками форума. Недоразумение.
...
Рейтинг: 0 / 0
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
    #38139606
Фотография П.С.М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EvLaUyтак он употреблял более изящный термин - мультитрэдовые приложения.
thread (с англ.) - нить, поток. Cache не создает потоков, а создает процесс. По сему, это изящный термин здесь не применим :)
А применим, как раз таки, многопроцессное, мультипроцессное ну или мультиджобовое (или так multijobs) приложение :)
...
Рейтинг: 0 / 0
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
    #38139637
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitВсё как в жизни ...
Это больше смахивает на курьёз...

Что-то большего я ждал от тех методов. Думал хоть контролем они нам смогут помочь, ан нет...

Т.о. тайный смысл их создания так и остался для меня вопросом - зачем их делали? В чём их тайный смысл? Зачем они, если можно и без них?
...
Рейтинг: 0 / 0
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
    #38139671
EvLaUy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
П.С.М.,
как говорится, любой спор - это спор о терминах. Вы так "по-профессорски" попытались тут всем всё объяснить, но позвольте с Вами не согласиться. Ведь это смотря что понимать под словом "процесс". Общепринято процесс - это реалия на уровне операционной системы, запись о которой выдается, например, командой "ps -el". Это - процессы. И когда мы говорим о средствах межпроцессного взаимодействия (семафоры, обменники, сегменты общей памяти), то слово "процесс" употребляется здесь именно в этом смысле. Очевидно, что поток выполнения, создаваемый новой командой job, не обладает свойствами процесса в указанном выше смысле и является реалией не на уровне операционной системы, а остается внутри самого Cache. И в этом отношении к нему больше подходит определение не процесса, а именно отдельного потока исполнения команд. И для них - опять-таки на уровне библиотек приложения (Java или Cache), а не на уровне ОС применяются специальные средства синхронизации.
...
Рейтинг: 0 / 0
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
    #38139683
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaС ошибкой такой же результат...Caché предоставляет инструменты для обработки тех или иных ситуаций, и от программиста зависит то, как он ими воспользуется.
Если в подзадаче всегда может возникнуть ошибка, то следует обрамить защищаемый код в try-catch, и Signal() вызовется в любом случае (аналог раздела finally).
Если процесс подзадачи кто-то принудительно завершил, то можно проверить из основного процесса наличие подпроцесса ##CLASS(%SYS.ProcessQuery).%ExistsId() или воспользоваться JOB^%ZSTOP.
krvsaЗачем они, если можно и без них?Если можете без них, не используйте.

PS: остаётся ещё надежда на примеры от AlexKB : 7933658
...
Рейтинг: 0 / 0
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
    #38139731
Фотография П.С.М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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

как-то так :)
...
Рейтинг: 0 / 0
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
    #38139790
EvLaUy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
П.С.М.,
цитируемый мной специалист писал мультитрэдовые приложения на Cache задолго до появления обсуждаемой здесь статьи. И выявил, кстати, немало трудновоспроизводимых ошибок Cache, в каждой из которых сумел в итоге убедить WRC. Так что надежность описываемых средств - во многом и его заслуга. Я же не навязываю эту точку зрения как единственно правильную. Кому как нравится - так и называет, главное, чтобы не очень далеко было по смыслу от того, ЧТО этим термином называется. В данном случае считаю - не слишком далеко.
В конце концов, какой-то термин устоится, дальше если будет не самым правильным.
Лошадиная сила, как известно, обозначает такую мощность, которую одна нормальная лошадь дать не может.
...
Рейтинг: 0 / 0
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
    #38139804
Фотография П.С.М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EvLaUyП.С.М.,
...
Кому как нравится - так и называет, главное, чтобы не очень далеко было по смыслу от того, ЧТО этим термином называется. В данном случае считаю - не слишком далеко.

золотые слова
...
Рейтинг: 0 / 0
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
    #38139894
imdb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EvLaUyцитируемый мной специалист писал мультитрэдовые приложения на Cache задолго до появления обсуждаемой здесь статьи.

Есть русское название: многопоточность. Зачем что-то придумывать и добавлять лишние англицизмы? Их вроде и так более чем.
...
Рейтинг: 0 / 0
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
    #38139915
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitможно проверить из основного процесса наличие подпроцесса ##CLASS(%SYS.ProcessQuery).%ExistsId()
О! Спасибо.
А что там является ИДшником процесса?
Сам-то джоб имеет уникальное значение $J... Но материнский процесс его не "знает", у него своё значение у $J.
...
Рейтинг: 0 / 0
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
    #38139929
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitЕсли можете без них, не используйте.
Так в том-то и интерес - есть ли в них (тех методах) нечто полезное. Пока ничего особенного не видно...
Разве что рисонуться новым синтаксисом.
...
Рейтинг: 0 / 0
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
    #38139936
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
imdbЕсть русское название: многопоточность.
Опять возвращаемся к вопросу "что есть поток?"...
...
Рейтинг: 0 / 0
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
    #38139978
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaА что там является ИДшником процесса?
Сам-то джоб имеет уникальное значение $J... Но материнский процесс его не "знает", у него своё значение у $J. $ZCHILD
imdbЕсть русское название: многопоточность. Зачем что-то придумывать и добавлять лишние англицизмы? Их вроде и так более чем.Можно ли назвать приложение по праву многопоточным, если на самом деле создаются несколько процессов, в каждом из которых лишь один поток?
...
Рейтинг: 0 / 0
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
    #38139999
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servit $ZCHILD

Спасибо!

Вот такое уже работает как нужно.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
tmp ;;;;[ 01/02/2013 10:34 ]
	n
	s job="test"
	;d $system.Event.Create(job)
	j START(job)
	s n=$ZCHILD
	for i=1:1:3 {
		w !,##CLASS(%SYS.ProcessQuery).%ExistsId(n)
		h 1
		;s stat=$system.Event.WaitMsg(job,1)
		;w !,$li(stat,1)
	}
	;d $system.Event.Delete(job)
	q
START(Job)
	h 1
	i 1/0
	d $system.Event.Signal(Job)
	q



И без излишеств...
...
Рейтинг: 0 / 0
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
    #38140085
imdb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaОпять возвращаемся к вопросу "что есть поток?"...

servitМожно ли назвать приложение по праву многопоточным, если на самом деле создаются несколько процессов, в каждом из которых лишь один поток?

Мое сообщение относится к понятию "мультитрэдовые", что есть английский вариант понятия "многопоточность". Не более того.
...
Рейтинг: 0 / 0
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
    #38140095
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
imdbМое сообщение относится к понятию "мультитрэдовые"
Ясно...
...
Рейтинг: 0 / 0
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
    #38140097
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitЕсли процесс подзадачи кто-то принудительно завершил, то можно проверить из основного процесса наличие подпроцесса ##CLASS(%SYS.ProcessQuery).%ExistsId() или воспользоваться JOB^%ZSTOPДля контроля "живости" процесса ещё можно использовать $d(^$job(childPID). А вот JOB^%ZSTOP я не стал бы пользоваться, так как при аварийном завершении процесса на уровне ОС эта точка входа не вызывается.
krvsaИ без излишеств...Правильно, только вместе с водой ты выплеснул... и новый механизм обмена сообщениями между процессами, которым, ИМХО, как раз и интересен класс %SYSTEM.Event. С синхронизацией процессов и Lock отлично справляется.
...
Рейтинг: 0 / 0
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
    #38140108
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Maslovтолько вместе с водой ты выплеснул... и новый механизм обмена сообщениями между процессами, которым, ИМХО, как раз и интересен класс %SYSTEM.Event
Чем плохо "общение" через глобал? Т.о. я могу написать любое количество информации в "удобочитаемой" форме, а не выгрызать её из листбилда, а потом разбирать через разделители или тот же листбилд...

Или "общение" через методы класса будут лучше? Т.е. опять - в чем преимущество?
...
Рейтинг: 0 / 0
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
    #38140117
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa,

да ничем оно не плохо, просто в %SYSTEM.Event просматривается механизм обмена сообщениями с очередями, а на глобалах его надо писать самому, "ручками".
...
Рейтинг: 0 / 0
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
    #38140124
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
main
	n 
	; создаём три процесса со своим приоритетом
	job job(3, -7, "яблоко", 5)
	job job(2, 0, "груша", 6)
	job job(1, 8, "слива", 7)
	; ожидаем сигнала пробуждения и
	; выводим результат на экран
	write $list($system.Event.WaitMsg(), 2),!
	write $list($system.Event.WaitMsg(), 2),!
	write $list($system.Event.WaitMsg(), 2),!
	q
job(x,delta,a,b)
	; меняем приоритет текущему процессу на delta
	do $system.Util.SetPrio(delta)
	; имитируем бурную деятельность задержкой в x сек.
	hang x 
	// посылаем сигнал пробуждения родительскому процессу
	// одновременно с результатом
	do $system.Event.Signal($zparent,a_"-"_(b*2))
	q


Выводит

Код: vbnet
1.
2.
3.
4.
TEST>d ^tmp
слива-14
груша-12
яблоко-10



Но как бы было хорошо, если бы в
Код: vbnet
1.
$list($system.Event.WaitMsg())


помимо
servit##; статусы подзадач
  s s(-1)="удалена"
  s s(0)="выполняется"
  s s(1)="выполнена"
был бы "отсутствует" или "прерван"...
Тогда я, я натюрлих! Почему бы такое не использовать. Ан нет!
...
Рейтинг: 0 / 0
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
    #38140127
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Maslovна глобалах его надо писать самому, "ручками".
Но ведь общение "одной строкой" и в листбидде не такое уш продвинутое.
...
Рейтинг: 0 / 0
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
    #38140130
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вместо
Код: plaintext
##CLASS(%SYS.ProcessQuery).%ExistsId(job)
обычно использую
Код: plaintext
$d(^$J(job))
...
Рейтинг: 0 / 0
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
    #38140132
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMorвместо
Код: plaintext
##CLASS(%SYS.ProcessQuery).%ExistsId(job)
обычно использую
Код: plaintext
$d(^$J(job))

Я тоже так буду делать, обещаю!
...
Рейтинг: 0 / 0
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
    #38140244
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa ,

Вы путаете обмен данными и синхронизацию (обмен сообщениями).
%SYSTEM.Event не предназначен для обмена данными. Вряд ли в строку поместится много неструктурированной информации.
krvsaНо как бы было хорошо, если быНапишите в WRC.
DAiMorвместо
Код: plaintext
##CLASS(%SYS.ProcessQuery).%ExistsId(job)
обычно использую
Код: plaintext
$d(^$J(job))
Безусловно , можно и так.
...
Рейтинг: 0 / 0
25 сообщений из 52, страница 2 из 3
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]