• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C# wielowątkowość

Object Storage Arubacloud
0 głosów
1,476 wizyt
pytanie zadane 16 lipca 2015 w C# przez Magneto Nowicjusz (160 p.)
Hey, chciałbym zrobić program, w którym podaję liczbę wątków i skrypt dopasowuje się i taką liczbę odala.

Aktualnie nie mam żadnego pomysłu jak się za to zabrać, tak więc nie umieszczam kodu.

1 odpowiedź

0 głosów
odpowiedź 16 lipca 2015 przez Dorion300 Szeryf (90,250 p.)
Jaki skrypt?

Co ma robić?

Znasz podstawy wielowątkowości? (ich tworzenie)

Ten skrypt jest w czymś innym zrobiony? (python?)
komentarz 16 lipca 2015 przez Magneto Nowicjusz (160 p.)
Potrafię stworzyć wątek, dwa wątki, trzy watki itd. ale chciałbym dowiedziec się jak stworzyć program, w którym domyślnie nie wiem ile użytkownik chce stworzyc wątków.

Mam voida, który wykonuje np. zapis do pliku ale chcę aby ten zapis dział się szybciej tak, więc wybieram ilość wątków i ten void odpala się w kilku wątkach(ewentualnie z innymi parametrami). Wiem, ze przykład jest trochę bez sensu ale to tylko przykład.
komentarz 16 lipca 2015 przez adrian17 Ekspert (344,860 p.)

Przechowujesz wątki w kontenerze.

Prosty przykład który tworzy osobny wątek dla każdej ścieżki i zapisuje w tym pliku tekst:

​
public static void Main(string[] args)
{
	var files = new[] {"plik1.txt", "plik2.txt", "innyplik.txt"};

	var threads = new List<Thread>();

	foreach (var file in files)
	{
		var path = file;

		var thread = new Thread(() =>
		{
			File.WriteAllText(path, "abcde");
		});

		thread.Start();
		threads.Add(thread);
	}

	foreach (var thread in threads)
		thread.Join();

}
komentarz 16 lipca 2015 przez Dorion300 Szeryf (90,250 p.)
Raczej chodziło mu aby nad jednym plikiem przyśpieszył pracę dzięki wielowątkowością.

A nie kilkami plikami na raz.

Jeśli chodzi o zapis do pliku to akurat zależy od dysku, nie od proessora.
komentarz 16 lipca 2015 przez adrian17 Ekspert (344,860 p.)
Czemu myślisz, że wiele wątków jednocześnie piszących do tego samego pliku może przyśpieszyć zapis? (plus, to raczej ogólnie nie jest zalecane.)
komentarz 16 lipca 2015 przez Dorion300 Szeryf (90,250 p.)
On raczej podał przykład, raczej chodziło mu ogólnie funkcje typu: "ciąg fibonacciego w tablicy"

Ale powiem tyle: raczej tak nie moża robić, niestety.

Albo można jakoś to "skontrolować" tak aby wątki pracowały między sobą, coś w tym stylu.

Ale  to jest dodatkowa praca która częsciowo dodatkowo obciąza processor.
komentarz 16 lipca 2015 przez Magneto Nowicjusz (160 p.)

Dzięki adrian17 , możesz napisać jeszcze co w tym wypadku daje metoda Join? Czytam o Tym ale jakoś nie mogę tego zrozumieć.

I da się może obliczyć ilość aktywnych wątków?

 

Co do przykładu to tylko przykład, bardziej realne może będzie to:

Mam na wejściu dane(nieznana ilosć), które rozdzielam i po prostu odpalam dla każdego kawałka nowy wątek(i ewentualnie kontroluję ilość zeby mi nie wyszło z 2000 wątków)

komentarz 16 lipca 2015 przez adrian17 Ekspert (344,860 p.)

.Join() czeka aż wątek się zakończy. Teoretycznie nie jest to obowiązkowe, ale w ten sposób masz nad nim większą kontrolę nad tym kiedy czynność wątku na pewno się zakończy i pewność że sam program zakończy się dopiero, gdy wszystkie wątki skończą pracę. (bez tego wątek może kontynuować pracę po zakończeniu głównego wątku programu aż skończy lub go system ubije). Tak więc w praktyce zawsze lepiej używać .Join(), a nie używać go tylko w szczególnych przypadkach.

I da się może obliczyć ilość aktywnych wątków?

No, wątki powinieneś trzymać w zmiennych / kontenerach - wtedy możesz po prostu sprawdzić ilość elementów kontenera.

Mam na wejściu dane(nieznana ilosć), które rozdzielam i po prostu odpalam dla każdego kawałka nowy wątek(i ewentualnie kontroluję ilość zeby mi nie wyszło z 2000 wątków)

No tak, brzmi rozsądnie. To jakie jest pytanie? :P

komentarz 16 lipca 2015 przez Magneto Nowicjusz (160 p.)

No tak, brzmi rozsądnie. To jakie jest pytanie? :P

Koledzy wyżej mieli wątpliwości, chciałem tylko je rozwiać.

komentarz 16 lipca 2015 przez Dorion300 Szeryf (90,250 p.)
edycja 17 lipca 2015 przez Dorion300
Można zrobić klasę która przyjmuje informacje a następnie je przetwarza wątkowo jeśli wykonamy polecenie "start".

 

Jesli chodzi o aktywność wątków to można z łatwością zrobić swój własny licznik.

Podobne pytania

0 głosów
1 odpowiedź 315 wizyt
pytanie zadane 11 listopada 2018 w C i C++ przez matiibal Użytkownik (620 p.)
+2 głosów
2 odpowiedzi 539 wizyt

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...