2013-01-21 16 views
5

W systemie Windows istnieją dwa sposoby wstawiania elementów pracy, aby uniknąć tworzenia zbyt wielu wątków:Port wejścia/wyjścia w stosunku do QueueUserApc?

Środki 1: Użyj IOCP;

Środki 2: Użyj funkcji QueueUserApc.

Jednakże oznacza 1 jest o wiele bardziej skomplikowana niż Oznacza 2.

Więc moje pytanie brzmi: jakie są korzyści z pomocą 1 w stosunku do środków, które od 2?

Odpowiedz

7

Po wywołaniu QueueUserApc należy skierować określony wątek.

IOCP ma wbudowany mechanizm wysyłania wątków, którego brakuje QueueUserApc, dzięki czemu można skierować najbardziej wydajny wątek z puli wątków. Mechanizm wysyłania wątków automatycznie zapobiega uruchamianiu zbyt wielu wątków w tym samym czasie (co powoduje dodatkowe przełączniki kontekstu i dodatkową rywalizację) lub zbyt małej liczbie wątków w tym samym czasie (co powoduje niską wydajność).

System Windows faktycznie śledzi liczbę wątków wykonujących zadania IOCP. Początkowo ustawia liczbę wątków, które pozwala uruchomić, równą liczbie wirtualnych rdzeni na komputerze. Jeśli jednak wątek blokuje wejścia/wyjścia lub synchronizację, inny wątek zablokowany na porcie IOCP zostanie automatycznie zwolniony, co pozwoli uniknąć głodzenia wątków.

Ponadto IOCP można łatwo podłączyć do I/O, aby zdarzenia I/O powodowały wywoływanie wątków zablokowanych na porcie IOCP. Jest to najbardziej efektywny sposób na wykonywanie operacji we/wy dla dużej liczby miejsc docelowych w systemie Windows.

+0

+1. Niezła odpowiedź. Uwaga: akapit drugi prowadzi bezpośrednio do przyczyny, dla której jesteś liczbą dozwolonych wątków "uruchomionych", a rzeczywisty rozmiar "uruchomionej" puli wątków może być znacząco różny. Zdolność systemu operacyjnego do wykonywania tego wewnętrznego planowania przez wykrywanie warunku oczekiwania jest niemal zadziwiająca i po prostu nie można go przecenić. – WhozCraig

+0

@WhozCraig: Zgadzam się. Jestem zaskoczony, że inne systemy operacyjne nie przyjęły podobnego mechanizmu wysyłki. Podczas gdy inne systemy operacyjne mają doskonałe mechanizmy wykrywania we/wy (takie jak Linux [epoll] (http://en.wikipedia.org/wiki/Epoll) i FreeBSD [kqueue] (http://en.wikipedia.org/wiki/ Kqueue)), nie znam żadnego innego systemu operacyjnego, który ma porównywalny mechanizm wysyłki, a tym bardziej jeden związany bezpośrednio z mechanizmem wykrywania/powiadamiania we/wy. –

Powiązane problemy