Thread Pool implementacia

Programovacie jazyky, rady, poradňa...
metthal
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2475
Registrovaný: 26 jan 2006, 18:32
Bydlisko: Nitra / Brno

Thread Pool implementacia

Príspevok od používateľa metthal »

Zdravim,

mam vlastnu wrapper classu na Thread-y, ktora dokaze volat aj instancne metody a rozmyslal som moju aplikaciu rozsirit tak, aby pouzivala thread pooling, pretoze aktualna implementacia sa mi nepaci. Pouzivam windowsacku C kniznicu process.h (_beginthreadex, _endthreadex). Win API poskytuje uz implementovany thread pool, avsak ja chcem opat zapojit do toho OOP a preto rozmyslam nad vlastnou triedou pre thread pooling. Nemam vsak uplnu predstavu ako na to.

Moja aktualna predstava spociva v tom, ze by som len pri vytvoreni pool-u specifikoval, kolko maximalne threadov chcem aby v pool-e existovalo. Budem mat nejaku queue s metodami a parametrami, ktore chcem aby sa vykonavali (to ako to tam narvem este nemam predstavu, ale to sa poriesi). Akonahle nieco pridam do queue, tak skontrolujem ci aktualny pocet threadov nie je rovny maximalnemu poctu, ak nie, vytvorim thread, inkrementujem pocitadlo. Ak je, tak nerobim nic a cakam. Vzdy ked nejaky thread skonci svoju cinnost, informuje thread pool o tom ze skoncil, tym padom thread pool dekrementuje pocitadlo a zase spusti novy thread.

Su vsak 2 veci, ktore sa mi na tomto navrhu nezdaju:
1. Trieda ThreadPool v sebe bude muset mat nejaky vector Thread-ov a zaroven Thread bude musiet vediet do akeho ThreadPool-u patri. Ten vztah ze obe triedy musia vediet o tej druhej sa mi nepaci.
2. Stale vytvaranie a zanikanie threadov. Neviem ako narocne je pre procesor vytvorit novy thread, ale mozno by to slo nejakym sposobom, neviem, multithreadingu sa venujem len asi posledneho pol roka, ze vytvorim presne pocet threadov, kolko si specifikujem ze ich chcem maximalne, suspendujem ich a nasledne ich len budem zobudzat. Neviem vsak ci je to vobec mozne implementovat.

Budem vdacny za akukolvek pomoc s navrhom od niekoho skusenejsieho a nie, ziadny boost a podobne nechcem pouzit. Chcem si to napisat sam.
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8223
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: Thread Pool implementacia

Príspevok od používateľa harrison314 »

Vytvaranie a rusenie threadov je strasne narocne.
To co chces riesi "vzor" producenti-konzumenti, v tomto pripade si vlakno pyta pracu.
A k ich vytvaraniu, therad pool si pri zrode vytvori jedno vlakno, pri prichode poziadavky na spracovanie sa pozries kolko je v queue cakajucich taskov a ak je ich napr viac ako 2 a pocet vytvorenych vlakien je mensi ako maximalny povoleny vytvoris nove a o ostatne sa postaraju producenti-konzumenti.

V ptherad robota na 10 minut :)
metthal
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2475
Registrovaný: 26 jan 2006, 18:32
Bydlisko: Nitra / Brno

Re: Thread Pool implementacia

Príspevok od používateľa metthal »

No ja posix thready nepouzivam. Ale tak hadam to dokazem spravit. Len par otazok.

Konzument, ak dobre chapem je ten moj thread co bude nieco spracovavat v thread poole a producent je ta moja slucka, ktora skuma zmeny na file descriptoroch (jedna sa o networking). A este otazka, ako budem drzat ten moj thread uspaty? Nejakym mutexom?
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8223
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: Thread Pool implementacia

Príspevok od používateľa harrison314 »

Ano dobre to chapes.
Bud mutexom alebo semaforom, zalezi ako to implementujes. len pozor pri ruseni vlakna by bolo dobre mutex alebo semafor uvolnit aby dobehlo.
metthal
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2475
Registrovaný: 26 jan 2006, 18:32
Bydlisko: Nitra / Brno

Re: Thread Pool implementacia

Príspevok od používateľa metthal »

Len stale si neviem predstavit ako to implementovat. :? Mam totiz slucku, ktora mi skuma file descriptory socketov, podla toho chcem rozdelit citanie socketov a zapis na sockety medzi thready v thread poole. Cize ja zistim ze prebehla zmena na 2 socketoch, tak ich proste hodim do queue thread poolu. Thread pool zisti ze je co robit, tak zoberie najprv prveho z queue, odomkne mutex prideleny danemu threadu, ale ako ten thread teraz zisti z akeho socketu ma citat, co presne bude ten thread robit?

Sorry za taketo otazky, ale vobec k tomu nemam ziadny teoreticky podklad, vsetko sa ucim len stylom pokus, omyl a aj by som si to najprv skusil skusobne naprogramovat na simulovanej komunikacii, ale netusim, co presne ten thread bude robit.
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8223
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: Thread Pool implementacia

Príspevok od používateľa harrison314 »

O vsetko sa ti postaraju producenti-konzumenti, ty zabezpecies iba vytvaranie thredov.
http://www2.fiit.stuba.sk/~cernans/pp/p ... izacia.pdf
metthal
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2475
Registrovaný: 26 jan 2006, 18:32
Bydlisko: Nitra / Brno

Re: Thread Pool implementacia

Príspevok od používateľa metthal »

No asi som uz pochopil, mna toto caka az dalsi semester, takze podobny material prisiel vhod. Diky.
Napísať odpoveď