powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
25 сообщений из 52, страница 1 из 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
25 сообщений из 52, страница 1 из 3
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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