PDA

Pogčedajte punu verziju : POSIX - Inter Thread communication


orangem
03. 02. 2009., 11:08
Pozdrav svima!

Napravio sam program u C-u, koji kreira oko 1000 thread-ova gdje svaki thread izvrsava odredjene operacije. Podatke na kojima ce raditi proslijedjuje im glavni program, prilikom kreiranja svakog thread-a.

To sve super radi, ali sada bih trebao upisati rezultate thih operacija u bazu.
Da svaki thread direktno upisuje, to bi onda bilo previse koneckija...pa sam razmisljao da napravim jos jedan koji bi samo primao rezultate od ovih 1000 i upisivao u bazu.

Za komunikaciju izmedju thread-a koji upisuje u bazu i ostalih 1000 threadova planirao sam da iskoristim pipe.

Sta mislite, da li je ovo dobro rjesenje?

japan
03. 02. 2009., 12:49
a ne mozes da koristis jednu globalnu konekciju, a da pristup kontrolises nekim mutexom?

mozda sam nesto propustio, napamet pricam, ali nekako mi deluje cistije da svaki thread zavrsi svoj posao...

Gruja
03. 02. 2009., 12:56
Verovatno će ti se pokazati da je 1000 threadova previše - u zavisnosti koliko su CPU intenzivni context switching može da ti pojede svo vreme i da ništa ne ostane za same threadove. Razmišljaj u pravcu da smanjiš broj threadova na par desetina, i da imaš neki thread pool u koji će se vraćati kad su neaktivni, da se ne bi kreirali svaki čas.

ivanhoe
03. 02. 2009., 13:41
^slazem se, ne vidim nikakav smisao u 1000 threadova, sem ako su idle veci deo vremena..

u svakom slucaju nije losa ideja imati jedan thread koji pise u bazu, time dobijas asinhroni rad (workeri ne moraju da cekaju na operacije u bazi, samo predaju podatke i idu dalje), a i moguce je odraditi neku optimizaciju upisa gomile podataka, zavisno koju bazu koristis..

Peca
03. 02. 2009., 14:09
a ne mozes da koristis jednu globalnu konekciju, a da pristup kontrolises nekim mutexom?
losa ideja, upravo ivanhoe rece zasto... zarobljivace thread-ove dok cekaju da se mutex oslobodi.
sa jos jednim posebnim thread-om samo bi mu tovarili podatke i isli dalje...

mada..... ako thread ne sme dalje pre nego sto se podatak upise, onda ipak mutex, i bez potrebe za posebnim threadom :)

orangem
03. 02. 2009., 15:02
1000 thread-ova mi radi bez problema, kada su kreirani nisu idle...svi imaju odredjeni posao koji izvrsavaju. Kada zavrse, setuju odredjenu vrijednost u globalni niz, tako da glavni scheduler zna koji je zavrsio, a koji nije.

(Ovo za sada dobro radi, ali postoji problem ako se thread prestane izvrsavati na sredini, pa ne setuje tu vrijednost da je posao zavrsen. Onda glavni scheduler moze da misli da je thread i dalje aktivan)

Sto se tice komunikacije izmedju 1000 thread-ova i thread-a upisivac u bazu... sta mislite, da li je pipe dobra opcija?