Re: Пул потоков на .net
От: IB Австрия http://rsdn.ru
Дата: 12.10.10 11:57
Оценка: 10 (2)
Здравствуйте, <Аноним>, Вы писали:

А>Возможно для этого лучше использовать какие-то иные технологии, тоже было бы интересно.

В 3.5 и ниже пул реализуется посредством Monitor.Wait() + Monitor.Pulse()
В 4.0 есть BlockingCollection<T> с нужным функционалом.
Более подробно — есть отличная серия статей Албахари. Threading in C#
По Wait/Pulse в 4-й части Signaling with Wait and Pulse
По BlockingCollection в 5-й BlockingCollection&lt;T&gt; — там прям конкретно пример кода для реализации пула.
... << RSDN@Home 1.2.0 alpha 4 rev. 1082>>
Мы уже победили, просто это еще не так заметно...
Re[5]: Пул потоков на .net
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 14.10.10 18:19
Оценка: 2 (1)
Здравствуйте, Suigintou, Вы писали:

S>Здравствуйте, gandjustas, Вы писали:


G>>Потоки из пула и есть довольно эффективное планирование. Самое главное в APM то что в большинстве случаев поток из пула будет браться только для исполнения callback функции при завершении операции. Это тысячная часть от общего времени асинхронных операций.

S>То есть использование APM-методов более эффективно, чем создание (или взятие из пула) потоков и вызова в них синхронных методов?
Конечно
Re[3]: Пул потоков на .net
От: Lloyd Россия  
Дата: 10.10.10 11:25
Оценка: +1
Здравствуйте, Аноним, Вы писали:

G>>Надо использовать асинхронное программирование. На время ожидания на клиенте никаких ресурсов не будет использоваться.


А>Тоже верно, но все равно пул придется огранизовывать чтобы на сервер вдруг откуда не возьмись не посыпалось 1000 запросов. Это как лучше сделать — просто List<WebHttpRequest> или есть что-то более подходящее для таких целей.


У вас какой-то свой сервер или IIS стоит?
Re[5]: Пул потоков на .net
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 10.10.10 12:07
Оценка: +1
Здравствуйте, Аноним, Вы писали:



А>>>Тоже верно, но все равно пул придется огранизовывать чтобы на сервер вдруг откуда не возьмись не посыпалось 1000 запросов. Это как лучше сделать — просто List<WebHttpRequest> или есть что-то более подходящее для таких целей.


G>>Не переживай, внутренние механизмы ограничат число одновременных запросов на сервер.


А>А что за механизмы, как регулируются. Например нужно задать не более 5ти подключений одновременно.


http://msdn.microsoft.com/ru-ru/library/system.net.servicepointmanager.aspx

Тебя будут интересовать

http://msdn.microsoft.com/ru-ru/library/system.net.servicepointmanager.defaultconnectionlimit.aspx
http://msdn.microsoft.com/ru-ru/library/system.net.servicepointmanager.defaultpersistentconnectionlimit.aspx
Пул потоков на .net
От: Аноним  
Дата: 10.10.10 09:14
Оценка:
Есть http запрос, выполняется он достаточно долго ~30 секунд. В основном тормозит серверная сторона, клиент ждет ответа.
На клиент сыпятся эти запросы, соотвественно есть смысл их распаралелить , но нужно и органичить их чтобы не создавалось сразу 1000 потоков. То есть создать некоторый пул потоков=запросов например не более 20 одновременно , как это лучше организовать в рамках .net framework 3.5, 4.0.
Возможно для этого лучше использовать какие-то иные технологии, тоже было бы интересно.
Re: Пул потоков на .net
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 10.10.10 09:42
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Есть http запрос, выполняется он достаточно долго ~30 секунд. В основном тормозит серверная сторона, клиент ждет ответа.

А>На клиент сыпятся эти запросы, соотвественно есть смысл их распаралелить , но нужно и органичить их чтобы не создавалось сразу 1000 потоков. То есть создать некоторый пул потоков=запросов например не более 20 одновременно , как это лучше организовать в рамках .net framework 3.5, 4.0.
А>Возможно для этого лучше использовать какие-то иные технологии, тоже было бы интересно.
Надо использовать асинхронное программирование. На время ожидания на клиенте никаких ресурсов не будет использоваться.
Re[2]: Пул потоков на .net
От: Аноним  
Дата: 10.10.10 11:19
Оценка:
лучше организовать в рамках .net framework 3.5, 4.0.
А>>Возможно для этого лучше использовать какие-то иные технологии, тоже было бы интересно.
G>Надо использовать асинхронное программирование. На время ожидания на клиенте никаких ресурсов не будет использоваться.

Тоже верно, но все равно пул придется огранизовывать чтобы на сервер вдруг откуда не возьмись не посыпалось 1000 запросов. Это как лучше сделать — просто List<WebHttpRequest> или есть что-то более подходящее для таких целей.
Re[3]: Пул потоков на .net
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 10.10.10 11:49
Оценка:
Здравствуйте, Аноним, Вы писали:

А>лучше организовать в рамках .net framework 3.5, 4.0.

А>>>Возможно для этого лучше использовать какие-то иные технологии, тоже было бы интересно.
G>>Надо использовать асинхронное программирование. На время ожидания на клиенте никаких ресурсов не будет использоваться.

А>Тоже верно, но все равно пул придется огранизовывать чтобы на сервер вдруг откуда не возьмись не посыпалось 1000 запросов. Это как лучше сделать — просто List<WebHttpRequest> или есть что-то более подходящее для таких целей.


Не переживай, внутренние механизмы ограничат число одновременных запросов на сервер.
Re[4]: Пул потоков на .net
От: Аноним  
Дата: 10.10.10 11:56
Оценка:
L>У вас какой-то свой сервер или IIS стоит?

Не сервер вообще не наш, некий веб сервер стороний на который перенаправляются запросы.
Re[5]: Пул потоков на .net
От: Lloyd Россия  
Дата: 10.10.10 12:00
Оценка:
Здравствуйте, Аноним, Вы писали:

L>>У вас какой-то свой сервер или IIS стоит?


А>Не сервер вообще не наш, некий веб сервер стороний на который перенаправляются запросы.


Узнайте какой. Тот же IIS уже реализует то, что вы хотите, "ис каропки".
Re[4]: Пул потоков на .net
От: Аноним  
Дата: 10.10.10 12:02
Оценка:
А>>Тоже верно, но все равно пул придется огранизовывать чтобы на сервер вдруг откуда не возьмись не посыпалось 1000 запросов. Это как лучше сделать — просто List<WebHttpRequest> или есть что-то более подходящее для таких целей.

G>Не переживай, внутренние механизмы ограничат число одновременных запросов на сервер.


А что за механизмы, как регулируются. Например нужно задать не более 5ти подключений одновременно.
Re[6]: Пул потоков на .net
От: Аноним  
Дата: 10.10.10 12:10
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, Аноним, Вы писали:


L>>>У вас какой-то свой сервер или IIS стоит?


А>>Не сервер вообще не наш, некий веб сервер стороний на который перенаправляются запросы.


L>Узнайте какой. Тот же IIS уже реализует то, что вы хотите, "ис каропки".


Интересно, допустим у них будет IIS, то как будет выглядеть схема взаимодествия ?
Просто очень сомневаюсь что они будут для нас что-то на нем настраивать или есть возможность поставить например IIS у себя и организовать через него пересылку запросов на тот сервер.
Re[7]: Пул потоков на .net
От: Lloyd Россия  
Дата: 10.10.10 12:28
Оценка:
Здравствуйте, Аноним, Вы писали:

L>>Узнайте какой. Тот же IIS уже реализует то, что вы хотите, "ис каропки".


А>Интересно, допустим у них будет IIS, то как будет выглядеть схема взаимодествия ?


Я так навскидку не скажу а под рукой IIS-а нет. То ли в настройках IIS-а было, то ли в web.config-е. Точнее не помню.
Re[6]: Пул потоков на .net
От: Аноним  
Дата: 10.10.10 12:48
Оценка:
G>>>Не переживай, внутренние механизмы ограничат число одновременных запросов на сервер.

А>>А что за механизмы, как регулируются. Например нужно задать не более 5ти подключений одновременно.


G>http://msdn.microsoft.com/ru-ru/library/system.net.servicepointmanager.aspx


G>Тебя будут интересовать


G>http://msdn.microsoft.com/ru-ru/library/system.net.servicepointmanager.defaultconnectionlimit.aspx

G>http://msdn.microsoft.com/ru-ru/library/system.net.servicepointmanager.defaultpersistentconnectionlimit.aspx

Спасиб ! То что нужно .
Re[2]: Пул потоков на .net
От: Suigintou  
Дата: 14.10.10 11:33
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Надо использовать асинхронное программирование. На время ожидания на клиенте никаких ресурсов не будет использоваться.

А если использовать APM методы (BeginXXX/EndXXX), будут ли создаваться (или браться из пула) потоки или же будет использовано какое-то более эффективное планирование?
Re: Пул потоков на .net
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 14.10.10 11:43
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Есть http запрос, выполняется он достаточно долго ~30 секунд. В основном тормозит серверная сторона, клиент ждет ответа.

А>На клиент сыпятся эти запросы, соотвественно есть смысл их распаралелить , но нужно и органичить их чтобы не создавалось сразу 1000 потоков. То есть создать некоторый пул потоков=запросов например не более 20 одновременно , как это лучше организовать в рамках .net framework 3.5, 4.0.
А>Возможно для этого лучше использовать какие-то иные технологии, тоже было бы интересно.

В 4 есть задачи в которых для шедулера можно указать что данная задача продолжительная.
Иногда стоит определить две очереди для быстрых запросов и продолжительных запросов, т.к. последние могут забить всю очередь.
и солнце б утром не вставало, когда бы не было меня
Re[3]: Пул потоков на .net
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 14.10.10 12:32
Оценка:
Здравствуйте, Suigintou, Вы писали:

S>Здравствуйте, gandjustas, Вы писали:


G>>Надо использовать асинхронное программирование. На время ожидания на клиенте никаких ресурсов не будет использоваться.

S>А если использовать APM методы (BeginXXX/EndXXX), будут ли создаваться (или браться из пула) потоки или же будет использовано какое-то более эффективное планирование?

Потоки из пула и есть довольно эффективное планирование. Самое главное в APM то что в большинстве случаев поток из пула будет браться только для исполнения callback функции при завершении операции. Это тысячная часть от общего времени асинхронных операций.
Re[4]: Пул потоков на .net
От: Suigintou  
Дата: 14.10.10 14:59
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Потоки из пула и есть довольно эффективное планирование. Самое главное в APM то что в большинстве случаев поток из пула будет браться только для исполнения callback функции при завершении операции. Это тысячная часть от общего времени асинхронных операций.

То есть использование APM-методов более эффективно, чем создание (или взятие из пула) потоков и вызова в них синхронных методов?
Re[5]: Пул потоков на .net
От: Lloyd Россия  
Дата: 14.10.10 15:05
Оценка:
Здравствуйте, Suigintou, Вы писали:

G>>Потоки из пула и есть довольно эффективное планирование. Самое главное в APM то что в большинстве случаев поток из пула будет браться только для исполнения callback функции при завершении операции. Это тысячная часть от общего времени асинхронных операций.

S>То есть использование APM-методов более эффективно, чем создание (или взятие из пула) потоков и вызова в них синхронных методов?

Использование APM-методов более эффективно, чем создание потоков и врял ли более эффективно, чем использование пула (т.к. они сами через пул и работают).
Re[6]: Пул потоков на .net
От: Lloyd Россия  
Дата: 14.10.10 18:40
Оценка:
Здравствуйте, gandjustas, Вы писали:

S>>То есть использование APM-методов более эффективно, чем создание (или взятие из пула) потоков и вызова в них синхронных методов?

G>Конечно

Можно подробнее почему APM эффективнее, чем использование пула?
Re[7]: Пул потоков на .net
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 14.10.10 18:48
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, gandjustas, Вы писали:


S>>>То есть использование APM-методов более эффективно, чем создание (или взятие из пула) потоков и вызова в них синхронных методов?

G>>Конечно

L>Можно подробнее почему APM эффективнее, чем использование пула?


Еще раз: apm вызывает асинхронные операции ОС, которые вообще не требуют ресурсов приложения до завершения.
Re[8]: Пул потоков на .net
От: Lloyd Россия  
Дата: 14.10.10 19:44
Оценка:
Здравствуйте, gandjustas, Вы писали:

L>>Можно подробнее почему APM эффективнее, чем использование пула?


G>Еще раз: apm вызывает асинхронные операции ОС, которые вообще не требуют ресурсов приложения до завершения.


Ступил. Почему-то думал, что APM — это про асинхронный вызов делегатов.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.