powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
52 сообщений из 52, показаны все 3 страниц
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
    #38138093
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заинтересовала статья Синхронизация процессов при распараллеливании задачи средствами 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
...
Рейтинг: 0 / 0
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
    #38138106
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а какая цель многоджобового программирования у вас ?
вы бы конвертацию БД сделали многоджобовой.

многоджобовость стоит применять при запуске больших процессов обработки или анализа данных, когда процесс может занимать длительное время.
...
Рейтинг: 0 / 0
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
    #38138161
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaНо примеров как всегда минимум...Каких именно примеров Вам не хватает?
krvsaПока планировалось использование "общения" материнского процесса с его "джобами" через глобал(ы) с некой "нашей структурой"...Если данных много, то почему бы и нет.
Общие временные данные можно хранить, например, в ^CacheTempUser .jobs($j, ...), так как приватные глобалы для этого не подойдут.
...
Рейтинг: 0 / 0
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
    #38138333
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMorа какая цель многоджобового программирования у вас ?
Уменьшить время "функциональных процессов".
Т.к. тесты показали, что на мощном сервере несколько джобов раздельно сделают "задачку" быстрее одного процесса...

DAiMorвы бы конвертацию БД сделали многоджобовой.
Мы собираемся всё делать многоджобово...
...
Рейтинг: 0 / 0
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
    #38138354
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitКаких именно примеров Вам не хватает?
В идеале хотелось бы почитать на русском что вообще делают (с примерами) все методы класса $system.Event...

Пример могу предложить такой:
- несколько джобов обрабатывают разные данные
- основной процесс (ОП) показывает общее состояние на данный момент
- ОП отслеживает окончание всех джобов
- ОП делает некое завершение по окончании работы всех джобов

Вот нечто такое...
...
Рейтинг: 0 / 0
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
    #38138357
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMorмногоджобовость стоит применять при запуске больших процессов обработки или анализа данных, когда процесс может занимать длительное время.
Спасибо КЕП!
...
Рейтинг: 0 / 0
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
    #38138388
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaМы собираемся всё делать многоджобово...
вот в этом деле главное не переборщить
у вас не так много процессов которые можно решить расспаралеливанием, наверно только отчеты и конвертация
но и отчеты можно просто запустить одним процессом и дать пользователю продолжать работать.

мы у себя реализовали формирование отчетов параллельный но правда с помощью Ensemble (хотя там все поверх %SYSTEM.Event),
на отдельном сервере. ну и плюс мы используем у себя много-серверную конфигурацию на ECP, для распределения пользовательской нагрузки.
...
Рейтинг: 0 / 0
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
    #38138723
EvLaUy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servit,
большое спасибо за интересную ссылку. Тема в свете требований к функционалу современных информационных систем наиважнейшая. Очень приятно, что такие средства есть не тольво в C и Java, но и в Cache. Вот слово только "многоджобовость" как-то режет слух. DAiMor, в вашей (нашей?) компании работал очень сильный специалист Руслан Павлов, с которым Вы наверняка общались (сейчас и он покинул, к сожалению) - так он употреблял более изящный термин - мультитрэдовые приложения.
...
Рейтинг: 0 / 0
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
    #38138744
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EvLaUyВот слово только "многоджобовость" как-то режет слух. DAiMor, в вашей (нашей?) компании работал очень сильный специалист Руслан Павлов, с которым Вы наверняка общались (сейчас и он покинул, к сожалению) - так он употреблял более изящный термин - мультитрэдовые приложения.Вы осведомлены о том что он покинул компанию, хотя правильнее так "покинул", т.к. на самом деле он типа в отпуске и через 2 недели будет год.
...
Рейтинг: 0 / 0
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
    #38138817
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это че за отпуск такой? По уходу за ребенком, что-ли?
...
Рейтинг: 0 / 0
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
    #38138840
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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)
}

}
...
Рейтинг: 0 / 0
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
    #38138854
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EvLaUyВот слово только "многоджобовость" как-то режет слух.Разве я где-то использовал это слово?
...
Рейтинг: 0 / 0
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
    #38139065
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.Это че за отпуск такой? По уходу за ребенком, что-ли?
нет, просто отпуск
...
Рейтинг: 0 / 0
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
    #38139304
nvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
nvp
Гость
DAiMorkrvsaМы собираемся всё делать многоджобово...
вот в этом деле главное не переборщить
у вас не так много процессов которые можно решить расспаралеливанием, наверно только отчеты и конвертация
но и отчеты можно просто запустить одним процессом и дать пользователю продолжать работать.

.
Как потребитель обсуждаемой системы (СОИ СЗН), могу сказатьо только то что просто запуск отчетов одним процессом дело не ускорит, это только освободит терминал, а требуется реально сократить время, по этому их пускать надо паралельными процессами. кроме того есть еще и регистр в котором тоже есть реальная возможность (причем на мой взгляд более выйгрышное) использовать распаралеливание обработки информации
...
Рейтинг: 0 / 0
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
    #38139435
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nvpКак потребитель обсуждаемой системы (СОИ СЗН), могу сказать о только то что просто запуск отчетов одним процессом дело не ускорит, это только освободит терминал, а требуется реально сократить время, по этому их пускать надо паралельными процессами. кроме того есть еще и регистр в котором тоже есть реальная возможность (причем на мой взгляд более выйгрышное) использовать распаралеливание обработки информации
собственно и я о том же, что регистр и отчеты
как долго у вас отчеты выполняются, я так понимаю проблемы со скоростью отчетов наверно на областной базе ?

а вот регистр изначально нужно было делать многозадачным, но сразу так делать не стали, тем более что хотя бы эта задача почти не требует серьезных доработок для этого даже сейчас.
с отчетами конечно несколько сложнее в силу текущего алгоритма расчета (я думаю, что мало что изменилось за почти 4, которые я уже не в АИРе), хотя вот аналитику проще было бы так омногозадачить.
...
Рейтинг: 0 / 0
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
    #38139456
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitПожалуйста
Из примера не совсем понятно для чего вообще применять те методы...
Только для того, чтобы пользоваться глобалом ^CacheTempUser.jobs(...)?
...
Рейтинг: 0 / 0
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
    #38139467
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMorтем более что хотя бы эта задача почти не требует серьезных доработок для этого даже сейчас
Готов опять поговорить о договоре?
Назови срок и сумму. Я договорюсь с начальством...
...
Рейтинг: 0 / 0
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
    #38139493
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaDAiMorтем более что хотя бы эта задача почти не требует серьезных доработок для этого даже сейчас
Готов опять поговорить о договоре?
Назови срок и сумму. Я договорюсь с начальством...
эххх, если бы все было так просто, времени то на это нет совсем, своими делами заняться некогда.
...
Рейтинг: 0 / 0
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
    #38139499
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такой вопрос...
Что вернет
Код: vbnet
1.
$system.Event.WaitMsg(<job>)


Если процесс завершился без
Код: vbnet
1.
d $system.Event.Signal(<job>)


или просто вылетел по ошибке?
...
Рейтинг: 0 / 0
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
    #38139502
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMorэххх, если бы все было так просто, времени то на это нет совсем, своими делами заняться некогда.
Тогда нефик такое писать. А то на свое значит времени нет... За то наше тебе кажется сделать ничего не стоит?
Напомню тебе что данный форум читают наши клиенты. И ты т.о. выставляешь нас х/з кем. Де ты сам это сделаешь все без проблем и быстро. А мы всейм составом что-то так и не можем это модернизировать.
Это считаешь нормально?
...
Рейтинг: 0 / 0
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
    #38139530
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такой вариант

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
tmp ;;;;[ 01/02/2013 10:34 ]
	n
	s job="test"
	d $system.Event.Create(job)
	j START(job)
	s stat=$system.Event.WaitMsg(job)
	w !,$li(stat,1)
	d $system.Event.Delete(job)
	q
START(Job)
	;d $system.Event.Signal(Job)
	q


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

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



Выдаёт три нуля с интервалом в секунду... Т.е. процесс типа работает.
...
Рейтинг: 0 / 0
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
    #38139544
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С ошибкой такой же результат...

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
tmp ;;;;[ 01/02/2013 10:34 ]
	n
	s job="test"
	d $system.Event.Create(job)
	j START(job)
	for i=1:1:3 {
		s stat=$system.Event.WaitMsg(job,1)
		w !,$li(stat,1)
	}
	d $system.Event.Delete(job)
	q
START(Job)
	i 1/0
	d $system.Event.Signal(Job)
	q
...
Рейтинг: 0 / 0
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
    #38139545
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть какой-то "пингующий" метод?
...
Рейтинг: 0 / 0
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
    #38139546
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaЧто вернет
<...>
Если процесс завершился без
<...>
или просто вылетел по ошибке?Что задача всё ещё выполняется, т.е. статус будет равен 0.
Вы могли бы просто закомментировать d $system.Event.Signal(n,r) и увидеть это сами.

Всё как в жизни: если начальник дал задание подчинённому без сроков, а подчинённый, выполнив его, забыл или не смог об этом уведомить начальника, значит для начальника задача ещё выполняется.
В такой ситуации помогают таймауты: если подзадача не вернула результат в отведённый срок, значит что-то пошло не так.
...
Рейтинг: 0 / 0
Синхронизация процессов при распараллеливании задачи средствами 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
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
    #38140275
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Немного потестил и вижу, что погорячился насчёт очередей. Их в готовом виде как раз нет (да никто и не обещал :).
Сообщение теряется, если предыдущее ещё не прочитано получателем. Поэтому, если процесс должен отправить несколько сообщений, надо обязательно проверять статус отправки каждого из них. Как-то так:
Код: javascript
1.
2.
3.
4.
5.
6.
while (есть что послать) {
  set NextMessage=some_text // формируем очередное сообщение
  do {
     set sc=$system.Event.Signal(myresource, NextMessage)
  } while ('sc)
}
...
Рейтинг: 0 / 0
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
    #38141056
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitНапишите в WRC.
Просто отложу использование этого как не нужное... Т.с. до лучших времён.
...
Рейтинг: 0 / 0
52 сообщений из 52, показаны все 3 страниц
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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