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

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

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

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

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

мы у себя реализовали формирование отчетов параллельный но правда с помощью Ensemble (хотя там все поверх %SYSTEM.Event),
на отдельном сервере. ну и плюс мы используем у себя много-серверную конфигурацию на ECP, для распределения пользовательской нагрузки.
...
Рейтинг: 0 / 0
05.02.2013, 18:53
    #38138723
EvLaUy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
servit,
большое спасибо за интересную ссылку. Тема в свете требований к функционалу современных информационных систем наиважнейшая. Очень приятно, что такие средства есть не тольво в C и Java, но и в Cache. Вот слово только "многоджобовость" как-то режет слух. DAiMor, в вашей (нашей?) компании работал очень сильный специалист Руслан Павлов, с которым Вы наверняка общались (сейчас и он покинул, к сожалению) - так он употреблял более изящный термин - мультитрэдовые приложения.
...
Рейтинг: 0 / 0
05.02.2013, 19:03
    #38138744
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
EvLaUyВот слово только "многоджобовость" как-то режет слух. DAiMor, в вашей (нашей?) компании работал очень сильный специалист Руслан Павлов, с которым Вы наверняка общались (сейчас и он покинул, к сожалению) - так он употреблял более изящный термин - мультитрэдовые приложения.Вы осведомлены о том что он покинул компанию, хотя правильнее так "покинул", т.к. на самом деле он типа в отпуске и через 2 недели будет год.
...
Рейтинг: 0 / 0
05.02.2013, 19:43
    #38138817
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
Это че за отпуск такой? По уходу за ребенком, что-ли?
...
Рейтинг: 0 / 0
05.02.2013, 19:56
    #38138840
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
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
05.02.2013, 20:06
    #38138854
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
EvLaUyВот слово только "многоджобовость" как-то режет слух.Разве я где-то использовал это слово?
...
Рейтинг: 0 / 0
05.02.2013, 22:45
    #38139065
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
Блок А.Н.Это че за отпуск такой? По уходу за ребенком, что-ли?
нет, просто отпуск
...
Рейтинг: 0 / 0
06.02.2013, 08:15
    #38139304
nvp
nvp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
DAiMorkrvsaМы собираемся всё делать многоджобово...
вот в этом деле главное не переборщить
у вас не так много процессов которые можно решить расспаралеливанием, наверно только отчеты и конвертация
но и отчеты можно просто запустить одним процессом и дать пользователю продолжать работать.

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

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


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


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

Код: 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
06.02.2013, 11:04
    #38139539
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
Такой

Код: 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
06.02.2013, 11:05
    #38139544
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
С ошибкой такой же результат...

Код: 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
06.02.2013, 11:06
    #38139545
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
Есть какой-то "пингующий" метод?
...
Рейтинг: 0 / 0
06.02.2013, 11:06
    #38139546
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синхронизация процессов при распараллеливании задачи средствами Cache' Event API
krvsaЧто вернет
<...>
Если процесс завершился без
<...>
или просто вылетел по ошибке?Что задача всё ещё выполняется, т.е. статус будет равен 0.
Вы могли бы просто закомментировать d $system.Event.Signal(n,r) и увидеть это сами.

Всё как в жизни: если начальник дал задание подчинённому без сроков, а подчинённый, выполнив его, забыл или не смог об этом уведомить начальника, значит для начальника задача ещё выполняется.
В такой ситуации помогают таймауты: если подзадача не вернула результат в отведённый срок, значит что-то пошло не так.
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Синхронизация процессов при распараллеливании задачи средствами Cache' Event API / 25 сообщений из 52, страница 1 из 3
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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