c# vlakna

Programovacie jazyky, rady, poradňa...
p4to
Expert
Expert
Používateľov profilový obrázok
Príspevky: 156
Registrovaný: 17 jún 2010, 8:07

c# vlakna

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

Caute,
pokusam sa spustit jednu ulohu na viacerych jadrach cpu, vypocet bezi cca 2 minuty no pocas celej doby je cpu vytazeny max na 20%
Co sa tyka lockovania a spolocnych premennych tak tam toho moc nie je. Disk, web, a ostatne zdroje tiez nevyuzivam.
Skusal som rozne pristupy,
- Thread,
- Task.Factory.StartNew(() =>
{ s.Start(); }, TaskCreationOptions.LongRunning);
- Parallel.Invoke

no vzdy len na cca 20%,
Sekvencne zbehne uloha za 2:40 ked pustim tu istu ulohu parallelne tak 2:20 co je myslim dost slabe ... Ked to pustam na 4-jadre (8 virtualnych)

Profiler mi toho tiez vela nepovedal ...

Dake rady?/
Mek
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4661
Registrovaný: 23 mar 2005, 23:00
Bydlisko: ZA <-> TN
Kontaktovať používateľa:

Re: c# vlakna

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

Mozes skusit pozriet, kolko vlakien ti to realne vytvori a pouziva a podla toho zistit, ci mas problem v programe, alebo je uzke hrdlo niekde inde. Niektore metody maju overload, kde si mozes urcit pocet pouzitych vlakien, napr. Parallel.For.
p4to
Expert
Expert
Používateľov profilový obrázok
Príspevky: 156
Registrovaný: 17 jún 2010, 8:07

Re: c# vlakna

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

No diki ale toto mam uz vyskusane (cca. pred 2 tyzdnami) no ma to len minimalny vpliv.

Spravil som dake screeny z profileru. Vyzera to, ze sa tam na nieco caka. Najviac na tom obrazku (4), co je to zac?
Moje vlakna tu tie Task X, kde X = 1, 2, ...

https://drive.google.com/drive/folders/ ... sp=sharing
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8215
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: c# vlakna

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

Fajn by bolo ukazat kod, ktory to pocita, aspon pseudokod.

Pokial tu ulohu dokazes rozdelit na podulohy, ktore trvaju menej ako 500ms pouzi Tasky, alebo PLinq
pokial nie, tak pouzi Thready a to bud s rovnakym alebo dvojnasobnym poctom ako vlaiken ako mas procesorov.

Ale ak si pustil viac thredov a vykon procesora je na 20% asi tam mas nejaku blokujucu IO operaciu.
Robis tam zo subormi, alebo sietov?
Napísať odpoveď