WedX - журнал о программировании и компьютерных науках

Доступность потоков в пуле потоков?

Как найти 60% (или N%) доступность потоков из пула потоков? Какая логика за этим?
Родительский поток порождает несколько URL-адресов с использованием потоков пула потоков и ожидает завершения всех дочерних потоков.

Код приведен ниже;
Родительская тема

 public void  Save()
 {
  List<Job> Jobs = PickJobs();

  int workerThreads = 0,compThreads = 0;
  ThreadPool.GetMinThreads(workerThreads, compThreads);

  int requiredThreads = 15;
  ThreadPool.SetMaxThreads(requiredThreads, compThreads);

  WaitCallback waitCallBack = default(WaitCallback);
  ManualResetEvent mEvent = default(ManualResetEvent);

 foreach (Job _job in Jobs) 
   {
   waitCallBack = new WaitCallback(CallBackFunc);
   mEvent = new ManualResetEvent(false);
   events.Add(mEvent);
   ThreadPool.QueueUserWorkItem(waitCallBack, new UrlData(_job, mEvent, HttpContext.Current));
   }
     WaitHandle.WaitAll(events.ToArray(), 300000);//05 Minutes
 }


Дочерние потоки

private void CallBackFunc(object obj)
{
     UrlData msgObj = (UrlData)obj;
   WebRequest lWebRequest = WebRequest.Create(psUrl);
   lWebRequest.Timeout = 60000;
   WebResponse lWebResponse = lWebRequest.GetResponse;

    msgObj.FinishEvent.Set();
}


Данные объекта для обмена данными между потоками

public class UrlData
{
public Job job;
public ManualResetEvent FinishEvent;
public HttpContext HttpContextRef;

public UrlData(Job pJob, ManualResetEvent pEvent, HttpContext pContext)
  {
      job= pJob;
      FinishEvent = pEvent;
      HttpContextRef = pContext;
  }
}


В приведенном выше коде требуемые потоки жестко запрограммированы как:

int requiredThreads = 15;
ThreadPool.SetMaxThreads(requiredThreads, compThreads);

Приведет ли это жесткое кодирование к истощению пула потоков? А что произойдет, если в пуле потоков нет доступных потоков? Как узнать общее количество потоков, доступных в пуле потоков на сервере хостинга?

Спасибо.


  • Почему вы беспокоитесь о потоках, доступных в пуле потоков? Пусть об этом позаботится реализация, и просто используйте пул потоков. 22.03.2013
  • Общее количество потоков, доступных в пуле потоков, - это, конечно, число, которое (может быть / является) сразу же неверным, как только вы его получили, и до того, как вы сделаете что-либо, чтобы воздействовать на это число. 22.03.2013
  • @Tony The Lion: Поскольку requiredThreads жестко запрограммированы, а потоки threadpool являются общими потоками и могут быть подхвачены другим приложением. 22.03.2013

Ответы:


1

После некоторого исследования я остановился на функции поиска Max Thread Count.
Возвращает количество потоков, доступных на данный момент в пуле потоков. Если происходит нехватка потока, возвращается ноль.

/// <returns>int (Number of threads currently available)</returns>
private int GetMaxItemsRetrievalCount()
{
int rtnVal = 1;
try {
    //Get Available idle threads currently in the thead pool.
    ThreadPool.GetAvailableThreads(workerThreads, completionThreads);

    rtnVal = workerThreads > MaxConcurrentThreads ? MaxConcurrentThreads : workerThreads;
    //Math.Min(MaxConcurrentThreads - currentWorkLength, workerThreads - ThreadBuffer);

    rtnVal = rtnVal > 0 ? rtnVal : 0;
} catch (Exception ex) {
    WriteTransactionalJobLog(new JobLogDTO {
        Mode = "Parallel",
        UniqueId = "GetMaxItemsRetrievalCount Exception",
        ThreadId = Thread.CurrentThread.ManagedThreadId.ToString(),
        StartTime = DateTime.Now.ToString(),
        ExceptionOrResult = ex.ToString()
    });
}

return rtnVal;
}
18.04.2013
Новые материалы

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


Для любых предложений по сайту: [email protected]