2009-10-16 24 views
5

Mam kilka zadań o niskim znaczeniu, które należy wykonać, gdy jest dostępny jakiś czas procesora. Nie chcę, aby to zadanie działało, jeśli uruchomione jest inne zadanie dodatkowego importu. Np. Jeśli pojawi się zadanie o normalnym/wysokim priorytecie, chcę, aby zadanie o niskim znaczeniu wstrzymywało się, dopóki nie zostanie wykonane ważne zadanie.C# niższy priorytet wątku w puli wątków

Jest bardzo duża liczba zadań o niskim znaczeniu do wykonania (50 do 1000). Więc nie chcę tworzyć jednego wątku na zadanie. Uważam jednak, że wątek nie dopuszcza niektórych specyfikacji priorytetów, prawda?

Jak mógłbyś rozwiązać ten problem?

Odpowiedz

2

Możesz utworzyć nowy wątek i użyć numeru Dispatcher, aby wysłać go z numerem various priorities.

Priorytety są nieco skoncentrowane na UI, ale tak naprawdę nie ma to znaczenia.

2

Nie powinieneś zadzierać z priorytetem regularnymThreadPool, ponieważ nie jesteś jedynym konsumentem. Przypuszczam, że logicznym podejściem byłoby napisanie własnego - być może tak prostego jak kolejka producenta/konsumenta, używając własnego klienta (ów) jako klienta (ów) - ustawiającego priorytet wątku samemu.

. NET 4.0 zawiera nowe biblioteki (TPL itp.), Aby to wszystko ułatwić - do tego czasu potrzebujesz dodatkowego kodu, aby utworzyć niestandardową pulę wątków lub kolejkę zadań.

+0

Podstęp polega na tym, że nie chcę rozpoczynać zadań ze względu na ich priorytety, chcę, aby były wykonywane z uwzględnieniem ich priorytetów. (to znaczy, zadanie o niskim priorytecie powinno się wstrzymać, jeśli uruchamiany jest priorytet o wysokim priorytecie) – Toto

+0

NB: Używam 3.5 framework – Toto

+0

Następnie musisz szukać "kolejki priorytetowej C#" - jest ich mnóstwo, ale mogę " t bezpośrednio polecić dowolny konkretny. Podejrzewam *, że TPL zaoferuje to bezpośrednio po wydaniu. –

2

Podczas korzystania z kompilacji w ThreadPool wszystkie wątki są wykonywane z domyślnym priorytetem. Jeśli będziesz bałagan z tym ustawieniem, zostanie zignorowany. Jest to przypadek, w którym należy przetoczyć własny wątek. Kilka lat temu rozszerzyłem SmartThreadPool, aby spełnić moje potrzeby. To może również zadowolić twoją.

0

Chciałbym utworzyć udostępnioną kolejkę oczekujących obiektów zadań, z każdym obiektem określającym jego priorytet. Następnie napisz wątek kontrolera, który obserwuje kolejkę i uruchamia nowy wątek dla każdego zadania, do maksymalnego limitu wątku i określając priorytet wątku podczas jego tworzenia. To tylko niewielka ilość pracy do wykonania tego, a możesz mieć aktywność raportu dyspozytora, a nawet dynamicznie dostosowywać liczbę uruchomionych wątków. Ta koncepcja sprawdziła się bardzo dobrze i może być zapakowana w usługę Windows do rozruchu, jeśli uczynisz twoją kolejkę tabelą bazy danych.

Powiązane problemy