OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 29 Март, 2024 02:34

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 26 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: О модели параллелизма
СообщениеДобавлено: Понедельник, 01 Февраль, 2010 11:58 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
ОТДЕЛЕНО ОТСЮДА: viewtopic.php?p=41463#p41463

Илья Ермаков писал(а):
... мы у себя в "Метасистемах" приняли решение, что внутри одного объектного пространства, т.е. одного экземпляра ядра ББ, нескольких потоков у нас не будет никогда.


Как тогда добиться того, чтобы хотя бы прогресс-бар и весь ББ не "зависал" на долгих процессах? Вот, например, у меня в таблицу ODT выгружается список учреждений около 2 минут, и всё это время ББ полностью "погружён в себя", что нехорошо по отношению к пользователю :) Даже Services.Action не помогает...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 01 Февраль, 2010 13:17 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Илья Ермаков писал(а):
На возражения "а многопоточность...", напоминаю, что мы у себя в "Метасистемах" приняли решение, что внутри одного объектного пространства, т.е. одного экземпляра ядра ББ, нескольких потоков у нас не будет никогда. Ввиду чего сразу перестали забивать себе мозги по каждому поводу "а что, если вот эта служба будет использоваться несколькими потоками...".

И получили возможность использовать ряд простых схем.

Можно это вынести в отдельную ветку и как следует обсудить.

Нахожу ваше решение излише строгим. Его можно смягчить.

Я вот в дотнете тоже к хозяйствованию в одном (логическом) объектном пространстве допускаю только один поток, но это не означает, что в одном экземпляре рантайма у меня существует всего одно (логическое) объектное пространство. У меня их несколько непересекающихся. Они взаимодействуют друг с другом с помощью очередей сообщений.

На тот случай, чтобы кто-то случайно не вызвал какую-то процедуру не в том потоке в каком надо у меня там стоят рантайм-проверки. Например, если какие-то процедуры должны исполняться только потоком класса BasicService, то в начале каждой из них стоит вызов очень маленькой процедурки (тактов на десять) BasicService.ThreadSafeInsurance()
Код:
/// <summary>
/// Осуществляет проверку того, что текущий поток является главным потоком сервиса.
/// Если текущий поток оказался другой, то возбуждается System.Exception.
/// </summary>
public static void ThreadSafeInsurance ()
{
   int id = System.Threading.Thread.CurrentThread.ManagedThreadId;
   if (id != service_managed_thread_id)
   {
      throw new System.Exception("You must call this code only in main service thread context. Service thread id = "
         + service_managed_thread_id + ", current thread id = " + id + ".");
   }
}

В будущем планирую изобрести способ разбить большое "объектное пространство" на "дерево объектных пространств". В корне "дерева" будет работать один поток раскидывая сообщения по ветвям. Непересекающиеся "ветви объектного дерева" будут обслуживать несколько других потоков. Ветвей может быть очень много, потоков - сколько процессорных ядер + эпсилон.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 01 Февраль, 2010 13:19 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Иван Кузьмицкий писал(а):
Как тогда добиться того, чтобы хотя бы прогресс-бар и весь ББ не "зависал" на долгих процессах?
Разбивать большие задачи на маленькие и выполнять их по частям в Services.Action.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 01 Февраль, 2010 16:23 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Кооперативная многозадачность часто полезна и в логическом плане - заставляет строго разбить процесс на состояния и переходы между ними. Для любителей автоматного программирования - самое то вообще...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 01 Февраль, 2010 16:28 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Сергей Губанов писал(а):
Я вот в дотнете тоже к хозяйствованию в одном (логическом) объектном пространстве допускаю только один поток, но это не означает, что в одном экземпляре рантайма у меня существует всего одно (логическое) объектное пространство. У меня их несколько непересекающихся. Они взаимодействуют друг с другом с помощью очередей сообщений.


Я тоже это и предлагаю. В одном адресном пространстве (одном приложении) несколько объектных. Только при лёгкости ядра ББ есть резон дать каждому пространству по Kernel-у и по собственному пространству модулей - и не париться.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: О модели параллелизма
СообщениеДобавлено: Понедельник, 01 Февраль, 2010 18:55 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
> дать каждому пространству по Kernel-у

А как же тогда передавать объекты из одного ядра в другое?
Сериализовывать в одном ядре, а потом десериализовывать в другом что ли?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: О модели параллелизма
СообщениеДобавлено: Понедельник, 01 Февраль, 2010 23:31 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Например, обмениваться через нетипизированную память (File-in-memory) и т.п.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: О модели параллелизма
СообщениеДобавлено: Понедельник, 01 Февраль, 2010 23:54 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
> обмениваться через нетипизированную память (File-in-memory)

То есть сериализовывать, а потом десериализовывать...
Это неприемлемо в случае когда нужно передавать сложные структуры данных с указателями.

У меня один поток получает сообщения по TCP, десериализует их, ставит в очередь на обработку. Другой поток забирает их из этой очереди, обрабатывает, формирует ответные сообщения, ставит их в очередь на отправку. Третий поток берёт сообщения из очереди отправляемых, сериализует их и отправляет по TCP.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 02 Февраль, 2010 08:11 

Зарегистрирован: Понедельник, 05 Июнь, 2006 09:49
Сообщения: 327
Откуда: Ленинград, Емельянов Алексей Николаевич
Сергей Губанов писал(а):
...Нахожу ваше решение излише строгим. Его можно смягчить.

Я вот в дотнете тоже к хозяйствованию в одном (логическом) объектном пространстве допускаю только один поток, но это не означает, что в одном экземпляре рантайма у меня существует всего одно (логическое) объектное пространство. У меня их несколько непересекающихся. Они взаимодействуют друг с другом с помощью очередей сообщений.

На тот случай, чтобы кто-то случайно не вызвал какую-то процедуру не в том потоке в каком надо у меня там стоят рантайм-проверки. Например, если какие-то процедуры должны исполняться только потоком класса BasicService, то в начале каждой из них стоит вызов очень маленькой процедурки (тактов на десять) BasicService.ThreadSafeInsurance()
...

Да, вот это мне понятно.
По поводу проверки: мне кажется была бы полезна, некая централизованная служба регистрации (процедуры в потоке), и проверка не в самой процедуре, а более общими средствами (т.е. не процедуры, а активного объекта)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: О модели параллелизма
СообщениеДобавлено: Среда, 03 Февраль, 2010 09:17 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Сергей Губанов писал(а):
У меня один поток получает сообщения по TCP, десериализует их, ставит в очередь на обработку. Другой поток забирает их из этой очереди, обрабатывает, формирует ответные сообщения, ставит их в очередь на отправку. Третий поток берёт сообщения из очереди отправляемых, сериализует их и отправляет по TCP.

Если не секрет, какой библиотекой для обмена сообщениями пользуетесь? Чьей-то чужой или самодельной?
Не могли бы Вы что-то сказать по поводу MPAPI, MPI.NET и .NET Remoting/WCF.
Просто я сейчас тоже занимаюсь похожей задачей -- распределённым приложением под .NET и C# и при этом немного вообще-то плаваю в этой теме... :(


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: О модели параллелизма
СообщениеДобавлено: Среда, 03 Февраль, 2010 13:24 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
> какой библиотекой для обмена сообщениями пользуетесь?

Ыыы??? Никакой.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: О модели параллелизма
СообщениеДобавлено: Среда, 03 Февраль, 2010 16:13 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Сергей Губанов писал(а):
> какой библиотекой для обмена сообщениями пользуетесь?

Ыыы??? Никакой.

То есть просто Mono-обёртками над BSD-сокетами? Но это же низкоуровнево и ненадёжно?

ЗЫ. Между потоками у вас тоже сообщения через сокеты летают?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: О модели параллелизма
СообщениеДобавлено: Среда, 03 Февраль, 2010 23:43 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
> То есть просто Mono-обёртками над BSD-сокетами?

Берёшь System.Net.Sockets.Socket и вперёд.

> Но это же низкоуровнево и ненадёжно?

Как страшно жить...

> Между потоками у вас тоже сообщения через сокеты летают?

Между потоками летают по указателям.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: О модели параллелизма
СообщениеДобавлено: Пятница, 05 Февраль, 2010 07:47 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Всё ясно.

Сергей Губанов писал(а):
Как страшно жить...

Да просто больше не хочется колоться, плакать, но продолжать есть кактус...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: О модели параллелизма
СообщениеДобавлено: Пятница, 05 Февраль, 2010 10:08 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Согласен, затрепали эти сокеты :)

Именно поэтому зреет желание (авантюрное и пока не до него, но...) послать их в ... вместе с TCP-уровнем, работать пониже на стеке протоколов.

Все эти вечные "умные" механизмы, которым не место быть впаянными на таком уровне.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: О модели параллелизма
СообщениеДобавлено: Пятница, 05 Февраль, 2010 14:07 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1428
Иван Кузьмицкий писал(а):
Вот, например, у меня в таблицу ODT выгружается список учреждений около 2 минут, и всё это время ББ полностью "погружён в себя", что нехорошо по отношению к пользователю :)


"В заботе о ближнем главное - не перестараться". ;) Многие вполне респектабельные программы ведут себя точно так же и это никого не волнует.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: О модели параллелизма
СообщениеДобавлено: Вторник, 09 Март, 2010 13:41 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Сергей Губанов писал(а):
> То есть просто Mono-обёртками над BSD-сокетами?

Берёшь System.Net.Sockets.Socket и вперёд.

> Но это же низкоуровнево и ненадёжно?

Как страшно жить...

> Между потоками у вас тоже сообщения через сокеты летают?

Между потоками летают по указателям.

Расскажите про это немного подробнее, пожалуйста? Правильно ли понял, что вместо передачи всего объекта, можно передать по TCP другому BB указатель на объект и он "поймет его", если находится на той же машине?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: О модели параллелизма
СообщениеДобавлено: Вторник, 09 Март, 2010 13:49 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
Trurl писал(а):
Иван Кузьмицкий писал(а):
Вот, например, у меня в таблицу ODT выгружается список учреждений около 2 минут, и всё это время ББ полностью "погружён в себя", что нехорошо по отношению к пользователю :)


"В заботе о ближнем главное - не перестараться". ;) Многие вполне респектабельные программы ведут себя точно так же и это никого не волнует.


Этот дурной тон чреват ошибками пользователя :) Реальная ситуация - человек считал, что ББ завис и просто через диспетчер задач убивал его.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: О модели параллелизма
СообщениеДобавлено: Вторник, 09 Март, 2010 15:41 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Учитывая, что выдавалсь сообщение "Процесс, долгий, может занять несколько минут, подождите..."?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: О модели параллелизма
СообщениеДобавлено: Вторник, 09 Март, 2010 16:24 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
А сделать свой прогресс бар вроде не сложно должно быть, а чтобы окна не зависали и он обновлялся воспользоваться поправкой Александра Ильина.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 26 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB