1 (изменено: Xameleon, 2021-02-19 16:28:42)

Тема: WSH: Multiprocess workers

Коллеги, приветствую. Решил поделиться с вами своими экспериментами по "изготовлению" Worker-ов для WSH. Если кто не сталкивался вот ссылка.
В кратце о воркерах - для распределения выполнения задач в HTML5 можно выполнять скрипты в отдельных потоках Worker-ах.


worker = new Worker(url)

В качестве url передаётся либо ссылка на скрипт либо тело скрипта, который будет выполняться в отдельном потоке.
Обмен данными с Worker-ом реализуется через метод postMessage(data) и событие onmessage(data)
В качестве data могут передаваться только сериализуемые данные (т.е всё что можно превратить в текстовое представление JSON). Это позволяет избежать проблем доступа к COM и необходимости внедрять маршалинг. На самом деле это очень краткое описание и за этой технологией стоит гораздо больше. Можно создавать Shared воркеры, доступные из разных контекстов, настраивать порты для воркеров и прочее... прочее...

Меня очень привлекла внешняя простота реализации и захотелось адаптировать её к WSH. Первое с чего начал - решил задействовать этот механизм как он есть. Т.е создать инстанс htmlfile от него получить доступ к конструктору Worker и дальше уже дело техники. Всё это прекрасно работает, но есть огромный жирный минус в том, что внутри скрипта воркера нельзя создавать ActiveX объекты. Скучно.... Куда ж нам без них. Решил попробовать реализовать альтернативу. Взял за основу Shell.Connector.wsc. Собственно его методы и события я делал как раз по аналогии с воркерами. Далее поверх собрал обёртку Worker.js (основной конструктор воркеров) и WorkerCore.js (Скрипт обеспечивающий обратную связь из скрипта воркера с хостом). Думал ниже описать работу примера, но не уверен, что тема будет интересна большому кругу лиц. Так что решил ограничиться комментариями в коде. Если совсем кратко - в главном скрипте создаётся массив тасков, для демонстрации представленный в виде таймаутов и 3 воркера, каждый из которых запрашивает у хост процесса новое задание, выполняет и снова запрашивает. Так потихоньку они разбирают очередь.

P.S Собственно для чего завёл эту тему - хотел узнать какие решения использовали вы. Возможно есть предложения по упрощению реализации. Буду рад почитать. )

UPD 11.02.2021
1) Заменил способ проверки доступности хостового процесса. Реализация через WMI сильно грузила систему.
2) сократил количество передаваемых данных
3) Оптимизировал код примера
4) Добавил код выгрузки воркеров, если заданий более не осталось
5) Добавил обработку события "убивания" воркера или падения его из-за ошибки.

UPD 19.02.2021
1) Залил код на GitHub - ссылка
2) Собрал пример использования многопроцессной параллельной сборки картинной галереи. 4 воркера генерируют изображения картин и передают их в основной процесс. Используются только встроенные в Windows компоненты. Для генерации изображений используется WIA.

Пример полученной галереи:

+ открыть спойлер

https://i.imgur.com/OyP6IJN.png

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

2

Re: WSH: Multiprocess workers

Интересно, хоть кто-нибудь скачал, проверил ?

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

3

Re: WSH: Multiprocess workers

Примерно неделю назад читал начальный пост. Тогда еще появилась мысль предложить выложить на гитхаб. Честно скажу - интересно, не проверял. До этого еще читал предыдущий пост про Shell.Connector. Кстати было интересно почитать -- ведь в том обсудении я тоже участвовал, но новый компонент пока не пробовал.

( 2 * b ) || ! ( 2 * b )

4 (изменено: Xameleon, 2021-02-20 21:53:07)

Re: WSH: Multiprocess workers

Rumata, благодарю за ответ ). Рад видеть, что ещё кто-то заглядывает в раздел WSH. На GitHub закинул, но пока с ним на "вы". Буду приучаться.

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

5

Re: WSH: Multiprocess workers

OFF: Я всегда заглядываю .

6 (изменено: Xameleon, 2021-02-21 10:38:02)

Re: WSH: Multiprocess workers

alexii пишет:

OFF: Я всегда заглядываю .

крайне рад это видеть ! Было ощущение, что форум "заброшен" . Тогда, очень надеюсь увидеть конструктивную критику и предложения по улучшению, если таковые будут. Я пока в сомнениях верности реализации.

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

7

Re: WSH: Multiprocess workers

Увы, руки «не доходят».

8

Re: WSH: Multiprocess workers

alexii, а ноги "не дотягиваются" ?

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !