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.
Thread Pool implementacia
-
harrison314
Hardcore addict
- Príspevky: 8223
- Registrovaný: 27 máj 2009, 20:42
- Bydlisko: Bratislava
- Kontaktovať používateľa:
Re: Thread Pool implementacia
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
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
Re: Thread Pool implementacia
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?
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
- Príspevky: 8223
- Registrovaný: 27 máj 2009, 20:42
- Bydlisko: Bratislava
- Kontaktovať používateľa:
Re: Thread Pool implementacia
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.
Bud mutexom alebo semaforom, zalezi ako to implementujes. len pozor pri ruseni vlakna by bolo dobre mutex alebo semafor uvolnit aby dobehlo.
Re: Thread Pool implementacia
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.
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
- Príspevky: 8223
- Registrovaný: 27 máj 2009, 20:42
- Bydlisko: Bratislava
- Kontaktovať používateľa:
Re: Thread Pool implementacia
O vsetko sa ti postaraju producenti-konzumenti, ty zabezpecies iba vytvaranie thredov.
http://www2.fiit.stuba.sk/~cernans/pp/p ... izacia.pdf
http://www2.fiit.stuba.sk/~cernans/pp/p ... izacia.pdf
Re: Thread Pool implementacia
No asi som uz pochopil, mna toto caka az dalsi semester, takze podobny material prisiel vhod. Diky.