Lame2 dajesz wprost czemu to niby ma sie nie udac?
Lame2 dajesz wprost czemu to niby ma sie nie udac?
Co nie udać?
Głos racjonalny.
No czemu uwazasz ze z jednym watkiem wszystko bedzie dzialalo tak samo szybko jakbym uzyl wiecej watkow?
A dlaczego miało by być szybciej?
Głos racjonalny.
Bo 2 + 2 = 4 bez względu na to, czy obliczymy je w ten sposób, czy rozbijając je na 1 + 1 + 1 + 1
Jeśli myślisz, że tworząc nowy wątek w magiczny sposób podwoisz moc obliczeniową maszyny, to jesteś w błędzie.
Nowy wątek nie wyczaruje procesorowi nowego rdzenia, tylko podzieli dostępne zasoby pomiędzy dwa wątki.
Załóżmy, że maszyna potrzebuje na operacje 1sek, to przy użyciu 50% mocy będzie potrzebowała 2sek. To tak w bardzo dużym uproszczeniu.
Ostatnio edytowane przez Orb : 06-08-2014 - 16:41
"Trąba powietrzna moich zepsutych myśli, zrywa ci z karku kołnierz ortopedyczny"
nie czytajac wczesniejszej czesci dyskusji... watki maja sens jedynie kiedy proces czekas na I/O ale jesli to cos co obciaza procesor to watki sa nawet szkodliwe bo przelaczanie watkow zjada zasoby cpu - pytanie wiec jaki problem chcesz rozwiazac
ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)
To czemu majac jeden watek moj wczesniejszy kod wykonywal sie w 21min a z 4 watkami wykonuje sie w 9min? Z DOM przenioslem sie na VTD-XML cholerstwo w niektorych przypadkach daje mi x60 lepsze wyniki niz uzywajac DOM a w najgorszym przypadku x3. Jedyne do czego moge sie przyczepic do VTD-XML to troche trudne w dubugowaniu i nie tak czytelne jak DOM ale wyniki sa powalajace...
Ostatnio edytowane przez szymkraw : 06-20-2014 - 14:45
Zrozum, nie ma sensu silić się na pisanie wielowątkowego kodu dla takich zadań, bo przy większej skali to w ogole nie przyśpiesza, ponieważ korzyść z wątków czerpie istniejąca już i działająca w systemie warstwa aplikacji.
Głos racjonalny.
Sluchacie
Procesor ma 2-4 zazwyczaj, czesto kazdy rdzenie jest HT i ciagnie 2 watki wiec 2x4=8 rownoleglych watkow ze sprzetowym wsparciem... dodawane watkow ma wiec sens do ok 2x8=16 bo wtedy masz 2 watki aplikacji na kazdy watek procesora - gdy jeden czeka na I/O to drugi pracuje, przekroczenie tej ilosci watkow daje coraz mniejsze zyski (i to szybko spadajace) a po chwili przynosi juz straty.
Jesli ktos mowi ze aplikacja znacznie przyspieszyla bo uzywa 4 watkow zamiast 1 watku no to jasne ze ma racje... ale poczekaj az dojdziesz do 64 czy 128 watkow to pogadamy. Dodatkowo ogromne znaczenie ma co ta aplikacja robi, bo jesli oblczenia (cpu bound) to nic watki nie przyspiesza, jedynie spowolnia. Jesli za to aplikacja robi duzo I/O to ma sens miec duze powolnych procesorow zamiast kilku szybkich.
Wezmy jako przyklad serwer WWW - wiekszosc czasu procesor spedza na czekaniu na dane - dostaje zapytanie, wysyla odpowiedz i czeka... i nie ma wielkiego znaczenia czy procesor ma 1GHz czy 3.4GHz, bo to nic nie zmieni - czekal bedzie tyle samo czasu... Ma wiec sens wsadzic np procesor z 32 rdzeniami po 1GHz kazdy (jak to robia z serwerami Sun Sunfire T1000) i pociagnac na tym dobrze obciazony serwer www, zamiast na wspolczesnym i7 z 8 rdzeniami po 2.8GHz czy jakos tak.
ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)
No to wlasnie o tym mowilem. Na poczatku sprawdzam ile max watkow moze ubsluzyc CPU. Mam 46 regul podpadajace na 9 kategorii. Obecnie tworze nowe watki dla kazdej z kategorii i join do glownego watku mam tez druga wersje ze tworze watki dla kazdej reguly podpadajacej pod dana kategorie. Dzisiaj bede testowal pozadnie oba rozwiazania.
Lame2 dalej nie rozumiesz co proboje osiagnac? Co ma do tego warstwa aplikacji powiedz mi?