Forum forum.napiprojekt.pl Strona Główna


 FAQFAQ  RegulaminRegulamin   SzukajSzukaj   GrupyGrupy   RejestracjaRejestracja 
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj  

Propozycja poprawy programu - multi tasking!

 
Napisz nowy temat   Odpowiedz do tematu    Forum forum.napiprojekt.pl Strona Główna -> Propozycje rozwoju
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
navrekkoo



Dołączył: 17 Sty 2010
Posty: 14

Podziękował: 0
Łącznie otrzymał 0 podziękowań w 0 postach

Ostrzeżenia: 0/5

PostWysłany: Wto Gru 27, 2011 20:40    Temat postu: Propozycja poprawy programu - multi tasking! Odpowiedz z cytatem

Program jest przydatny, wspaniały, niezastąpiony - naprawdę wielkie dzięki za NapiProjekt. Niemniej jednak program, który wyszukuje napisy do, powiedzmy, 40 plików w katalogu, powinien w swojej łaskawości zezwolić innym programom na w miarę bezproblemową pracę w tym samym czasie - zwolnić nieco zasobów, tak żeby nie zmulał całego kompa i wszystkich programów naokoło! W końcu, co by nie mówić o skomplikowaniu procesu wyszukiwania napisów, nie jest to wyliczanie obiektów w Lightwave czy innym 3D Studio ani montowanie filmów w Premiere, więc zmulenie systemu, bo program szuka napisów, jest co najmniej dziwne i wygląda na brak podstawowej funkcji zwalniania zasobów w kodzie!

Nie znam się być może aż tak dobrze na programowaniu, wiem jednak z doświadczenia, że zmulić system można nawet przy pomocy VBA gdy nie zastosuje się DoEvents (w innych językach - MultiWait itp., w jeszcze innych - jeszcze inaczej zapewnie zwalnia się zasoby procesora). Bez tej funkcjonalności niekiedy strach odpalić program, zwłaszcza gdy trzyma się na dysku kilka(naście/dziesiąt) filmów, do których co jakiś czas wyszukuje się globalnie napisy.

Proszę! Sprawcie, żeby następna wersja (choćby beta) była dopracowana pod tym względem!

Z góry dziękuję.
Powrót do góry
Ogląda profil użytkownika Wyślij prywatną wiadomość
Reklamiarz
Członek zespołu








Ostrzeżenia:

PostWysłany: Wto Gru 27, 2011 20:40    Temat postu: Klikając w reklamę wspierasz serwis



Powrót do góry
admin
Członek Zespołu NapiProjekt



Dołączył: 04 Cze 2006
Posty: 1859

Podziękował: 5
Łącznie otrzymał 51 podziękowań w 50 postach

Ostrzeżenia: 0/5

PostWysłany: Czw Gru 29, 2011 18:52    Temat postu: Odpowiedz z cytatem

Co rozumiesz poprzez zamulanie?

Zabieranie całej mocy procesora? Nie powinno być z tym problemu, ponieważ zadania są kolejkowane. Natomiast faktycznie trochę cieknie pamięcią, co zostanie zapewne poprawione.
Powrót do góry
Ogląda profil użytkownika Wyślij prywatną wiadomość
navrekkoo



Dołączył: 17 Sty 2010
Posty: 14

Podziękował: 0
Łącznie otrzymał 0 podziękowań w 0 postach

Ostrzeżenia: 0/5

PostWysłany: Pią Gru 30, 2011 11:11    Temat postu: Odpowiedz z cytatem

Kolejkowanie a zabieranie mocy procesora to dwie różne sprawy. Nawet malutki program, który nie zwalnia zasobów, może zamulić komputer. I to właśnie robi napi-projekt - kradnie focusa (to na pewno, nawet gdy jest w tle, aktywuje się bez potrzeby - wpisanie niekiedy adresu w przeglądarce lub kliknięcie w link podczas pracy napi-projektu to nie lada wyczyn) oraz zamula całkowicie system.

Ja może niezbyt dobrze to tłumaczę ale proszę zobaczyć na przykładzie visual basica i funkcji DoEvents:
http://vb4all.pl/teoria/iso2/funkcje/doevents.htm

Czyli - oddawanie sterowania systemowi operacyjnemu, nie traktowanie własnego programu jak jedynego uruchomionego procesu, który użytkownicy śledzą z zapartym tchem. Smile

Innymi słowy, zgodnie z tym co jest napisane przy opisie DoEvents: "Funkcja DoEvents oddaje sterowanie aby system operacyjny mógł wykonać inne zdarzenia". Jak widać nie chodzi tu o brak kolejkowania ani o to, że system przestaje działać, tylko o to, że program, który działa egoistycznie, bez umożliwiania innym programom współdziałania, zawsze zmuli system i inne programy. Fakt, że Windows jest systemem posiadającym multitasking to nie wszystko - niekiedy trzeba dać multitaskingowi szansę.

Nie wiem w jakim języku jest pisany NapiProjekt, nie jestem jakimś dobrym programistą, ale tego typu problemy występują, zwłaszcza w takich małych programach. Windows nigdy nie pozwoli przejąć wszystkich zasobów, jednak program może znacznie utrudnić działanie innych programów.

PS. W google, jak zauważyłem, sporo ludzi pyta o DoEvents w C++. Na przykład: http://www.xtremevbtalk.com/showthread.php?t=82094

PPS. Jeszcze gdzieś indziej przeczytałem o Application.ProcessMessages w Dephi: http://4programmers.net/Delphi/Artykuły/Animacje

PPPS. Mam nadzieję, że chociaż trochę pomogłem. Smile
Powrót do góry
Ogląda profil użytkownika Wyślij prywatną wiadomość
admin
Członek Zespołu NapiProjekt



Dołączył: 04 Cze 2006
Posty: 1859

Podziękował: 5
Łącznie otrzymał 51 podziękowań w 50 postach

Ostrzeżenia: 0/5

PostWysłany: Pią Gru 30, 2011 12:46    Temat postu: Odpowiedz z cytatem

Kolejkowanie ma tu dużo do znaczenia, może krótko opiszę jak działa program:

W przypadku pobierania kilkudziesięciu napisów, obliczanie hasha, pobieranie, oraz "obrabianie" napisów odbywa się w wątkach, maksymalnie jednocześnie takie wątki są uruchomione 3, reszta czeka grzecznie w kolejce na zakończenie pracy przez wcześniej uruchomione wątki. Z moich obserwacji wynika, że te 3 jednocześnie pracujące wątki maksymalnie obciążają procsor w 80%, co na moim kilku letnim komputerze (Core 2 Duo 2,2Ghz) nie powoduje zwolnienia pracy systemu, podczas testów program dobrze sobie radził nawet przy 10 wątkach i nie powodował lagów systemu.

Co do Application.ProcessMessages uważam iż przy obecnej konstrukcji programu jest ono niepotrzebne, ponieważ program wszytskie operacje obciążające procesor wykonuje w wątkach (tak więc system ma cały czas dobry dostęp do aplikacji).

Poniżej cytat z http://www.lukas-home-page.ovh.org/artykuly/delphi-watki.php

Cytat:
Zapewne wielu z Was spotkało się kiedyś z syndromem "zawieszania" się programu np. podczas wykonywania skomplikowanej czynności. Tak naprawdę aplikacja wtedy działa, ale nie odbiera od systemu komunikatów, np. o konieczności odświeżenia okna, co jest szczególnie widoczne gdy formularz naszego programu przysłonimy (a następnie odsłonimy) jakimś innym oknem. Wówczas formularz naszej aplikacji staje się cały biały, a przy dłuższych tego typu "brakach reakcji" system oznacza program jako ten który "nie odpowiada". W rzeczywistości oznaczenie "nie odpowiada" jest tak naprawdę stwierdzeniem, iż nasz program nie obiera komunikatów wysyłanych mu przez system. Co więc robić by uniknąć tego czarnego scenariusza ? Są na to dwie metody. Pierwszą metodą jest wstrzelenie instrukcji Application.ProcessMessages gdzieś w pętlę; tą która powoduje, że program się zawiesza. Druga, to bardziej skomplikowana metoda którą właśnie z tego względu się dzisiaj zajmiemy. Zadanie takie można powierzyć do rozwiązania wątkom.


Co do zwalniania zasobów pamięci (które nie mają nic wspólnego z Application.ProcessMessages, oraz z obciążeniem procesora) to faktycznie program nie zwalnia całej pamięci, natomiast nie powinno to mieć większego wpływu na obciążenie systemu (chyba że pamięć RAM jest w 100% zajęta)


Załaczam filmik obrazujący obciążenie:
http://www.napiprojekt.pl/forum_pliki/obciazenie.mp4


Dziekuję za rady, ale wydaje mi się, że nie tutaj leży problem. Jakie jest średnie obciążenie u Ciebie? Może mógłbyś podesłać podobny filmik? Jaki masz komputer/system?

EDIT:
Co do focusa, to program zmienia go tylko raz (aby wyświetlić okienko nad przeglądarką)

EDIT2: Może masz ustawione włączanie przeglądarki po pobraniu/nieznalezieniu napisów? Może te 40 stron które się prawie jednocześnie otworzyły spowodowały duże obciązenie?
Powrót do góry
Ogląda profil użytkownika Wyślij prywatną wiadomość
navrekkoo



Dołączył: 17 Sty 2010
Posty: 14

Podziękował: 0
Łącznie otrzymał 0 podziękowań w 0 postach

Ostrzeżenia: 0/5

PostWysłany: Pią Gru 30, 2011 13:25    Temat postu: Odpowiedz z cytatem

Wszystkie zbędne opcje mam powyłączane, pobierają się tylko napisy, nie wyświetlają się żadne okienka przeglądarki.

W moim wieloletnim doświadczeniu w obcowaniu z programistami Wink niejednokrotnie już spotkałem się z tłumaczeniami typu "wszystko powinno działać bez problemu, nic nie powinno obciążać, jest wystarczający zapas" itd. itp. Teoria swoje, praktyka swoje.

Mój komp to Core 2 Duo 2.67 GHz, XP SP3, 2 GB pamięci, 8800GT.

Zaciekawił mnie fragment "3 jednocześnie pracujące wątki maksymalnie obciążają procsor w 80%". Jeżeli w takim programie jak napi-projekt 3 wątki obciążają procesor w 80% to nie jest to "tylko". To jest "aż"! W tym momencie odpaliłem trailer filmu HD w youtube bez akceleracji sprzętowej i Opera ma 50% obciążenia w porywach, po czym spada do 20-30%. Przy tej ilości danych, program pobierający napisy z netu powinien mieć 2-3% obciążenia procesora a nie 80%!

Jak wspomniałem - chwalę program, wiem że wielu programistów jest w jakiś sposób sfrustrowanych gdy amator wytyka błędy, ale to naprawdę miłe gdy nieraz ktoś spróbuje nie bić się z rzeczywistością. Przywieszanie programów przez napi-projekt jest faktem - upierdliwym faktem w dodatku dla kogoś kto od lat używa komputerów i dla kogo szybkość pracy jest głównym kryterium oceny programów (tutaj, niestety, polskie programy wypadają często najgorzej). "Przy obecnej konstrukcji programu jest ono (Application.ProcessMessages - przyp.) niepotrzebne"? Być może. Ale wstawienie tego jako opcji w programie, choćby dla potrzeb testów w jakiejś wersji beta, byłoby miłe. Chociażby na zasadzie "[x] multiwait - testowa opcja mogąca zmniejszyć obciążenie procesora na wolniejszych komputerach".

Zajętość procesora też niewiele tu pomoże, ponieważ program przywiesza inne programy skokowo, nie ciągle (domyślam się, że niektóre procedury są bardziej obciążające niż inne).

Ewentualnie wprowadzenie dodatkowego parametru "process priority" mogłoby tu pomóc jeżeli rzeczywiście jest taka niechęć do stosowania funkcji zwalniających zasoby dla pozostałych tasków.

A to screenshot porównawczy:
http://www.rat.net.pl/cpuusagenapi.gif

PS. Chętnie też "zaopiekuję się" wersją "beta" z dodaną funkcją Application.ProcessMessages tu i ówdzie - potestuję i powiem czy pomogło. Jeżeli autor będzie tak miły oczywiście. Smile
Powrót do góry
Ogląda profil użytkownika Wyślij prywatną wiadomość
admin
Członek Zespołu NapiProjekt



Dołączył: 04 Cze 2006
Posty: 1859

Podziękował: 5
Łącznie otrzymał 51 podziękowań w 50 postach

Ostrzeżenia: 0/5

PostWysłany: Pią Gru 30, 2011 13:58    Temat postu: Odpowiedz z cytatem

navrekkoo napisał:

Zaciekawił mnie fragment "3 jednocześnie pracujące wątki maksymalnie obciążają procsor w 80%". Jeżeli w takim programie jak napi-projekt 3 wątki obciążają procesor w 80% to nie jest to "tylko". To jest "aż"! W tym momencie odpaliłem trailer filmu HD w youtube bez akceleracji sprzętowej i Opera ma 50% obciążenia w porywach, po czym spada do 20-30%. Przy tej ilości danych, program pobierający napisy z netu powinien mieć 2-3% obciążenia procesora a nie 80%!

A to screenshot porównawczy:
http://www.rat.net.pl/cpuusagenapi.gif



Ilość pobieranych danych z internetu jest nie duża, natomiast program pobiera dane również z dysku. Takie zachowanie jak na wykresie jest zupełnie normanle, porgram oblicza 2 hashe md5 dla każdego pliku filmowego. Ciekawi mnie jakby wyglądałby u Ciebie wykres obliczający hash md5 120 plików? Pozatym gdyby wyciagnąć średnie obciążenie, procesora to podejrzewam że w obu przypadkach byłoby podobne, a że wykres zawieras "duże szczyty" obrazuje to tylko chwilowe obciążenie podczas obliczania hasha.


navrekkoo napisał:

"Przy obecnej konstrukcji programu jest ono (Application.ProcessMessages - przyp.) niepotrzebne"? Być może. Ale wstawienie tego jako opcji w programie, choćby dla potrzeb testów w jakiejś wersji beta, byłoby miłe. Chociażby na zasadzie "[x] multiwait - testowa opcja mogąca zmniejszyć obciążenie procesora na wolniejszych komputerach".


Nie chce mi się tłumaczyć, ale gdzie Ty to chcesz wsadzić, aby przyniosło efekt? W wątek?

navrekkoo napisał:

Zajętość procesora też niewiele tu pomoże, ponieważ program przywiesza inne programy skokowo, nie ciągle (domyślam się, że niektóre procedury są bardziej obciążające niż inne).


Z przesłanego wykresu wynika, że program nie obciążył w 100% procesora, jak zatem możliwe jest przywieszenie pracy innych programów? Może wąskim gardłem jest tu transfer z dysku twardego?

navrekkoo napisał:

Ewentualnie wprowadzenie dodatkowego parametru "process priority" mogłoby tu pomóc jeżeli rzeczywiście jest taka niechęć do stosowania funkcji zwalniających zasoby dla pozostałych tasków.


Ale jakich funkcji zwalniających zasoby?
Powrót do góry
Ogląda profil użytkownika Wyślij prywatną wiadomość
navrekkoo



Dołączył: 17 Sty 2010
Posty: 14

Podziękował: 0
Łącznie otrzymał 0 podziękowań w 0 postach

Ostrzeżenia: 0/5

PostWysłany: Pią Gru 30, 2011 14:14    Temat postu: Odpowiedz z cytatem

"(...) Gdzie Ty to chcesz wsadzić, aby przyniosło efekt? W wątek?"

Nie wiem, nie mój program, ja gdy pisałem programy mniej więcej wiedziałem gdzie znajduje się najbardziej pożerająca zasoby pętla/funkcja/itd. i tam starałem się zwalniać zasoby, nawet kosztem nieznacznego spadku szybkości pracy programu.

Ale... szczerze, nie che mi się drążyć tematu, nie wiedziałem, że w jakiś sposób sprawię, że poczujesz się urażony (chociaż w końcu to zrozumiałe - jakiś amator daje Ci głupie rady, można to odbierać w ten sposób). Nie wiem gdzie konkretnie w kodzie masz coś zmienić, bo to nie mój program. Ja zgłaszam, że działa źle, że za dużo obciąża, dzięki czemu praca z komputerem staje się dobijająco irytująca i najrozsądniejszym rozwiązaniem jest poczekać aż napi-projekt skończy sprawdzać napisy (a nie tak to powinno działać). Ja podaję fakty a nie obliczenia i wykresy (na podstawie których zawsze można powiedzieć, że wszystko działa jak należy). Faktem jest, że mi spowalnia komputer (niekoniecznie obciążając w 100% procesor) w większym stopniu, niż wynikałoby to ze skomplikowania prostego bądź co bądź programu do pobierania napisów.

Jak wspomniałem - chciałem pomóc jednocześnie Tobie i sobie (zmniejszając mój poziom irytacji związany z użytkowaniem programu). Nie upieram się, że musisz cokolwiek w programie robić - to Twoje dzieło, ludzie są zadowoleni i to pewnie wystarczy. Ja ze swojej strony jednak nie dam sobie wmówić, że coś co mi zamula komputer działa szybko i bezproblemowo.

Powodzenia z nowymi wersjami.

PS. Tyle lat już w komputerach siedzę, że potrafię znaleźć problem, jeżeli wynika on z np. złego sterownika, słabej wydajności dysków itd. I nie, nie tu leży problem.

PPS. Weź też pod uwagę, że większość użytkowników prawdopodobnie pobiera napisy głównie do pojedyńczych plików; ja odkładam sobie do jednego katalogu wszystkie filmy, które napisów nie mają i co jakiś czas przeszukuję ten katalog w nadziei, że ktoś coś przetłumaczył - stąd też mój problem jest prawdopodobnie odosobniony.
Powrót do góry
Ogląda profil użytkownika Wyślij prywatną wiadomość
netboy5



Dołączył: 07 Lis 2009
Posty: 8

Podziękował: 0
Łącznie otrzymał 0 podziękowań w 0 postach

Ostrzeżenia: 0/5

PostWysłany: Czw Lut 02, 2012 11:18    Temat postu: Odpowiedz z cytatem

U mnie jest podobnie. Przy większej ilości plików komp lekko przymula.

Ale u mnie to raczej pewne, że program tak mocno czyta z dysku, że nie daje możliwości normalnie porobić na kompie. Czasem ten problem nie występuje, ale jak już przytnie to tak jakbym konwertował film do rvmb w 2 watkach i jeszcze oglądał jakiś serial na kompie i robił na przeglądarce jednocześnie .... a nawet jakbym robił te 3 rzeczy naraz to i tak mi komp mocno nie przymula....

Czy na serio musi to aż tak ciągnąć danych z dysku? jak pobieram napisy do 30-40 filmów / odcinków serialu. to nie zależy mi by program pobrał wszystkie napisy w ciągu 10-15 sekund ale mogę trochę dłużej poczekać ... Smile
Powrót do góry
Ogląda profil użytkownika Wyślij prywatną wiadomość
admin
Członek Zespołu NapiProjekt



Dołączył: 04 Cze 2006
Posty: 1859

Podziękował: 5
Łącznie otrzymał 51 podziękowań w 50 postach

Ostrzeżenia: 0/5

PostWysłany: Czw Lut 09, 2012 12:49    Temat postu: Odpowiedz z cytatem

W jednej z (najbliższych) przyszłych wersji zostaną dodane ustawienia związane z wydajnością programu.
Powrót do góry
Ogląda profil użytkownika Wyślij prywatną wiadomość
Wyświetl posty z ostatnich:   
Napisz nowy temat   Odpowiedz do tematu    Forum forum.napiprojekt.pl Strona Główna -> Propozycje rozwoju Wszystkie czasy w strefie CET (Europa)
Strona 1 z 1

 
Skocz do:  
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach


RSS

Powered by phpBB © 2001, 2005 phpBB Group