У меня есть основной поток UI в котором работает основное приложение.
Я паролельно ему запускаю дополнительные потоки, для обработки данных.
Чтобы обеспечить их взаимодействие я создал статический клас посредник.
Но он обнспечивает погную глобализация, тоесть он один на всё приложение.
Мне же необходимо локализовать его в рамках одной сесии.
Я попытался сделать через привычные HttpContext.Current.Session, но....
Так как я пытаюсь обращаться к ниму из нового потока, то HttpContext.Current
становиться для меня недоступным.
Как реализовать взаимодействие между потоками в рамках одной сесии.?
Может быть можно и без объекта Session.
15.06.06 23:42: Перенесено модератором из 'Веб программирование' — der Igel
Здравствуйте, Lloyd, Вы писали:
L>Не надо тебе этого. Почитай какие-нибудь статьи об ASP.NET и о веб-приложениях вообще.
спасибо за предложение. Почитать конечно не когда не лишнее. Но я не совсем новичек в этом деле и прекрастно понимаю, что мне это надо. Есть другие пути реализации моей проблемы, но они мне не нравяться, как говорится "Не красивые"...
Re: ASP.NET 2.0 & Multy Threading
От:
Аноним
Дата:
15.06.06 19:59
Оценка:
>>Я паролельно ему запускаю дополнительные потоки, для обработки данных.
ЗАЧЕМ?!?!?!?!?!? В ASP.NET!?!?!?!?!?
Вот уж "Заставь дурака Богу молиться... он всё на нитки попересадит". Что тебе это даёт? Сильно производительность "приросла"? У тебя может сервера, как минимум, 4-х процессорные, чтобы о каком-то "приросте" говорить?
Здравствуйте, BlackTigerAP, Вы писали:
BTA>ЗАЧЕМ?!?!?!?!?!? В ASP.NET!?!?!?!?!?
BTA>Вот уж "Заставь дурака Богу молиться... он всё на нитки попересадит". Что тебе это даёт? Сильно производительность "приросла"? У тебя может сервера, как минимум, 4-х процессорные, чтобы о каком-то "приросте" говорить?
..не бузи.. мне нужна паролельность вычислений... и что у меня сервер 4-х процессорный.
Здравствуйте, BlackTigerAP, Вы писали:
BTA>К вопросу о "не совсем новичек" и "нитках"...
BTA>"паролельно" пишется как "параллельно"...
...сколько бы не было удовлетворения в мире, всегда есть люди которым его не хватает.
Re: ASP.NET 2.0 & Multy Threading
От:
Аноним
Дата:
15.06.06 20:30
Оценка:
Не надо ничего многониточного делать в веб-приложении. Всё уж очень нестабильно. Сделай отдельный "сервер вычислений" и давай ему задания. Куда надежней и менее геморройно и в стабильности и в ниточности.
Здравствуйте, BlackTigerAP, Вы писали:
BTA>Не надо ничего многониточного делать в веб-приложении. Всё уж очень нестабильно. Сделай отдельный "сервер вычислений" и давай ему задания. Куда надежней и менее геморройно и в стабильности и в ниточности.
это все хорошо, а как быть с информированием о процессе работы..?? тоесть, если мне хочеться, чтобы основной поток UI знал как там дела с вычислениями..??
Здравствуйте, bazaea, Вы писали:
B>ну например так или не так
B> protected void Page_Load(object sender, EventArgs e) B> { B> HttpContext.Current.Session["a"] = "aaa"; B> Thread t = new Thread(new ParameterizedThreadStart(f1)); B> t.Start(HttpContext.Current); B> } B> private void f1(object o) B> { B> HttpContext context = (HttpContext)o; B> for (int i = 0; i < 100; i++) B> { B> context.Response.Write(context.Session["a"]); B> } B> }
Это хорошо, НО, что мне здесь не очень нравиться:
1) Явное связывание.
2) Хотелось бы работать с глобальным HttpContext.Current, так как моему методу нужно общаться не на прямую с Session, а через клас посредник.
protected void Page_Load(object sender, EventArgs e)
{
Helper.Safe = 5;
Thread t = new Thread(new ThreadStart(f1));
...
t.Start();
}
private void f1(object o)
{
Helper.Safe += 4;
}
...............
public sealed class Helper
{
public static int Safe
{
get { return (int)HttpContext.Current.Session["a"]; }
set { HttpContext.Current.Session["a"] = value; }
}
}
...что то вроде этого..
Re[2]: ASP.NET 2.0 & Multy Threading
От:
Аноним
Дата:
15.06.06 20:50
Оценка:
В ASP.NET нет никакого "основного потока UI". Есть IIS, приложение, сессия и броузер.
Ну так и опрашивай "сервер вычислений" на предмет статуса. Что мешает?
Здравствуйте, Flap, Вы писали:
F>спасибо за предложение. Почитать конечно не когда не лишнее. Но я не совсем новичек в этом деле и прекрастно понимаю, что мне это надо. Есть другие пути реализации моей проблемы, но они мне не нравяться, как говорится "Не красивые"...
Объясни тогда что в твоем понимании поток UI и в чем его предназначение.
Здравствуйте, BlackTigerAP, Вы писали:
BTA>В ASP.NET нет никакого "основного потока UI". Есть IIS, приложение, сессия и броузер.
BTA>Ну так и опрашивай "сервер вычислений" на предмет статуса. Что мешает?
Да, народ давайте серьездно порассуждаем, как это можно сотварить красиво и правильно в АСП. Не будем говорить о целесообразности, просто НАДО. Но вот, как мне кажеться, это с изюменкой, тоесть джолжно быть все просто и элегантно..... хм... но как .. .
Re[3]: ASP.NET 2.0 & Multy Threading
От:
Аноним
Дата:
15.06.06 21:11
Оценка:
>>Брателлос, ты ж не в теме. Ты ж от нее отписался.
Да вот сижу, мазохизмом занимаюсь. Параллельно с просмотром "Голого Пистолета 33 и 1/3"...
.
F>Да, народ давайте серьездно порассуждаем, как это можно сотварить красиво и правильно в АСП. Не будем говорить о целесообразности, просто НАДО. Но вот, как мне кажеться, это с изюменкой, тоесть джолжно быть все просто и элегантно..... хм... но как .. .
Все станет просто и элегантно, если в сессии ты будешь хранить идентификатор задания и передавать его в рабочую нитку, которая по завершении запишет что она завершила обработку задания в какой-нить источник, который будет доступен для проверки "UI"-ниткой статуса задания. В качестве такого источника можно взять, например, какой-нить статический контейнер (например Dictionary), или объект Application, но оба эти варианта не лишены недостатков, так что я использовал бы какую-нить табличку в базе данных.
F>Да, народ давайте серьездно порассуждаем, как это можно сотварить красиво и правильно в АСП. Не будем говорить о целесообразности, просто НАДО. Но вот, как мне кажеться, это с изюменкой, тоесть джолжно быть все просто и элегантно..... хм... но как .. .
Это нельзя серьезно обсуждать. Слова "процесс работы" и "основной поток UI" имеют мало общего и с этим форумом, и с тем, из которого вас принесло.
Здравствуйте, Flap, Вы писали:
F>это основной поток, в котором выполняется текушая страница.
Что ты имешшь в виду, говоря выполняется?
Re[3]: ASP.NET 2.0 & Multy Threading
От:
Аноним
Дата:
15.06.06 21:29
Оценка:
>>как это можно сотварить красиво и правильно в АСП
(На полном серьёзе) ЭТО? КРАСИВО? ПРАВИЛЬНО? НА ASP.NET? Никак. Пусть будет "имхо".
Это как тут товарисч один собирался на ASP.NET сканировать документы... Зачем смешивать квадратное с зеленым? Выгод это не даст. По-любому нужно через ThreadingPool делать, а его держать на уровне приложения, а не сессии. Создаванием потоков в лоб можно убить систему, даже 4-хядерную. Тот же "AppServer" и получится.
Если из моих 4х вопросов выкинуть последний, то очень красиво и правильно и получится. ASPNET — аспнетит, а "вычислитель" — вычисляет. Все счастливы и не пытаются друг друга убить.
Здравствуйте, BlackTigerAP, Вы писали:
BTA>Это как тут товарисч один собирался на ASP.NET сканировать документы... Зачем смешивать квадратное с зеленым? Выгод это не даст. По-любому нужно через ThreadingPool делать, а его держать на уровне приложения, а не сессии. Создаванием потоков в лоб можно убить систему, даже 4-хядерную. Тот же "AppServer" и получится.
В трех строчках умудрился наделать столько ошибок
1. Не ThreadingPool, а ThreadPool
2. Держать его ну уж никак не получится, т.к. управляет им не приложение, а .net runtime.
3. ThreadPool существует не на уровне приложения, а на уровне app domain-а.
4. Через ThreadPool убить asp.net гораздо проще чем через нитки, т.к. он (asp.net) сам по себе очень даже использует ThreadPool.
Re[4]: ASP.NET 2.0 & Multy Threading
От:
Аноним
Дата:
15.06.06 21:59
Оценка:
Уфф... Я уж думал проблемы в "зеленом" или "квадратном"...
>>Это хорошо, НО, что мне здесь не очень нравиться: >>1) Явное связывание. >>2) Хотелось бы работать с глобальным HttpContext.Current, так как моему методу нужно общаться не на прямую с Session, а через клас посредник.
а смысл этого посредника? сделай наоборот.
в сессии храни клас со всеми пропертями необходимыми тебе, а не строй "обертку" над сессией. тогда одной операцией ты достанешь его и дальше уже работашь с этим классом а не с HttpContext.Current и здесь к тому же локи будет проще расставить.