Případ TThreadPool a maximální počet vláken

vložil Radek Červinka 24. května 2024 14:34

Jen taková krátká poznámka ze života.

Dělal jsem úkol, kde se spouštělo velké množství tasků, které nezávisejí na pořadí. Prostě jak přijde nový požadavek, tak se převezme a podle případu se vygeneruje x výstupů. Krásná úloha pro TTask a TThreadPool. Fungovalo to nádherně, jen si zákazník přál, aby si mohl regulovat kolik dostane program vláken.

TThreadPool má property MaxLimitWorkerThreadCount, která je v D11 a D12 inicializována na TThread.ProcessorCount * 2. Takže prima, při inicializaci jsem nastavil

  TThreadPool.Current.SetMaxWorkerThreads(Cfg.MaxThreadCount);

a počet vláken klesl, ale přišlo mi, že v některých situacích je počet vláken trochu větší. Po zkoumání jsem přišel na to, že v D12 přibyla nová property TThreadPool.UnlimitedWorkerThreadsWhenBlocked. Tato property je inicializována na True a cituji

Allows thread pool to increase number of working threads higher than MaxWorkerThreads
when processing of work requests is blocked. This is when job request queue is not empty,
pool has no idle or retired threads, and CPU usage is low. This may be a sign of deadlock.

Takže jsem tedy nastavil

  TThreadPool.Current.UnlimitedWorkerThreadsWhenBlocked := False;

a případ uzavřen.

Tagy: , ,

Komentování ukončeno

Naše nabídka

MVP
Ing. Radek Červinka - Embarcadero MVP
profil na linkedin, Twitter:@delphicz

Nabízím placené poradenství a konzultace v oblasti programování a vývoje SW.
Dále nabízíme i vývoj speciálního software na zakázku.

Neváhejte nás kontaktovat (i ohledně reklamy).

love Delphi

O Delphi.cz

Delphi je moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64, Mac OSX, Linux a na iPhone a Android.

Delphi.cz je nezávislý portál pro uživatele Delphi. Portál není koncipován pro úplné začátečníky, i když i ti se zde nebudou nudit, ale spíše na programátory, kteří již něco znají a chtějí své znalosti dále rozvíjet a sledovat novinky.

Poslední komentáře

Comment RSS

Dle měsíců