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?/
c# vlakna
-
Mek
Addict
- Príspevky: 4661
- Registrovaný: 23 mar 2005, 23:00
- Bydlisko: ZA <-> TN
- Kontaktovať používateľa:
Re: c# vlakna
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.
Re: c# vlakna
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
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
- Príspevky: 8215
- Registrovaný: 27 máj 2009, 20:42
- Bydlisko: Bratislava
- Kontaktovať používateľa:
Re: c# vlakna
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?
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?