Nieskonczona petla

0

Hej,

Stworzyłem nieskończoną pętlę, która co iterację zwiększa zmienną "i" o 1 i ją wyświetla. Gdy śledzę wykorzystanie procesora w menedżerze zadań to wynosi ono około 30%(mam 4-rdzeniowy CPU, więc stwierdzam, że może być wykorzystywany tylko 1 rdzeń). Chciałbym, aby wykorzystanie CPU wahało się w okolicy 80%, bo zależy mi na szybkości wykonywania iteracji. Macie jakiś pomysł jak to zrobić, pokombinować coś z klasa "Thread" i z Dispatcher'ami?

z góry dzięki

0

Niestety podane przez Ciebie zadanie - w takiej formie - jest niemożliwe do zrównoleglenia.

Wyobraź sobie, że siedzisz sam w pokoju i na głos zaczynasz liczyć - tak szybko jak tylko potrafisz - jeden, dwa, trzy, cztery (...).

A teraz wyobraź sobie, że zapraszasz znajomych i siedzicie w czwórkę - w jaki sposób miałoby to przyśpieszyć odliczanie / w jaki sposób Ty chciałbyś to odliczanie przyśpieszyć?

Wydaje mi się, że mamy do czynienia z problemem X/Y - co próbujesz obliczyć?

0

Na ten moment nic nie obliczam, zastanawiam się jedynie czy dałoby się to przyśpieszysz.
A powiedz jakbym stworzył coś w stylu, że jeden wątek wykonuje iteracje, a drugi wypisze liczbę używając Console.WriteLine(i);
Mógłbym coś zyskać na wydajności, czy wręcz przeciwnie?

2

Ok, wróćmy do analogii:

Wyobraź sobie, że siedzisz w pokoju z kolegą i liczysz w pamięci po kolei - jeden, dwa, trzy (...) - zapisując, po kolei za każdym razem, każdą liczbę na kartce, przekazując kartkę znajomemu, który czyta ją na głos, po czym oddaje Ci ją, abyś mógł zapisać kolejną liczbę. I tak raz po raz, liczba po liczbie.

Zdaje się, że będzie znacznie wolniejsze niż liczenie i mówienie na głos samemu, prawda? ;-)

Fachowo można powiedzieć, że będzie tutaj duży narzut związany z synchronizacją - aby uniknąć tzw. data race (sytuacji w której jesteś w połowie zapisywania liczby np. 1520, a kolega już zaczyna czytać kartkę i wychodzi z tego po prostu piętnaście), musiałbyś tak czy siak czekać aż kolega przeczyta liczbę, a dopiero potem liczyć następną. I wydajność leci na łeb.

Tak jak powiedziałem: Twojego problemu nie da się w żaden sposób przyśpieszyć, biorąc pod uwagę to, co napisałeś - opowiedz coś więcej o tym Twoim algorytmie.

Wielowątkowość to bardzo skomplikowana sprawa, wbrew pozorom, i często nie jest wcale najlepszym podejściem do problemu.

0

Ok, dzięki. Dużo mi rozjaśniłeś.

0

Tobie chodzi o to że procesor nie jest w pełni wykorzystywany w czasie wykonywania programu. To jest tak skomplikowany proces, że nie masz na to prawie żadnego wpływu , To zależy od procesora , pamięci podręcznej , magistrali , pamięci RAM i wielu innych rzeczy , Komputer wykonuje kilkadziesiąt albo kilkaset zadań jednocześnie ,

0

Po co miałbyś wyświetlać liczby na ekranie aż tak szybko? I tak nikt nie nadąży tego czytać.
A monitor wyświetla obraz np. 60 razy na sekundę, więc w pewnym momencie zaczniesz gubić wyświetlane wartości.

0

Wyświetlaj co n-tą wartość, zawsze wąskim gardłem systemu są wejścia/wyjścia, mniejsze obciążenie wyjścia szybsza iteracja.

0

zawsze wąskim gardłem systemu są wejścia/wyjścia

eee, co?

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0