Udostępnij za pośrednictwem


Używanie funkcji jądra Winsock kontra funkcji wywołania zwrotnego zdarzeń

W przypadku niektórych operacji gniazda, aplikacja jądra Winsock (WSK) może albo wywołać jedną z funkcji WSK gniazda, aby wykonać operację, albo zaimplementować i włączyć funkcję wywołania zwrotnego zdarzenia na gnieździe. Podsystem WSK wywołuje tę funkcję, gdy wystąpi zdarzenie związane z operacją. Na przykład podczas odbierania danych na gnieździe zorientowanym na połączenie aplikacja WSK może wykonywać wywołania do funkcji WskReceive gniazda, lub zaimplementować i włączyć funkcję wywołania zwrotnego zdarzenia WskReceiveEvent na gnieździe. Wymagania aplikacji WSK określają, która metoda powinna być używana przez aplikację. Przykłady użycia obu metod znajdują się w dokumentacji usługi WSK.

Poniższe listy zawierają podsumowanie niektórych kluczowych punktów dla każdej metody.

Użycie funkcji kernela Winsock

  • Aplikacja WSK napędza operacje gniazd, co oznacza, że aplikacja WSK kontroluje operacje gniazda. Może to uprościć synchronizację wymaganą przez aplikację WSK.

  • Aplikacja WSK zapewnia IRP do funkcji gniazd. Te IRP są kolejkowane przez podsystem WSK do momentu zakończenia działania gniazda. Aby uzyskać więcej informacji na temat używania IRPs z funkcjami WSK, zobacz Using IRPs with Winsock Kernel Functions.

  • Aplikacja WSK może wykonywać operacje blokujące gniazda, czekając na ukończenie każdej operacji przez podsystem WSK.

  • Aplikacja WSK może wymagać przechowywania wielu operacji gniazda w kolejce w niektórych sytuacjach, aby zapewnić wysoką wydajność transferu danych na gniazdach połączeniowych, zapobiec upuszczaniu przychodzących datagramów na gniazdach datagramowych lub zapobiec odrzuceniu przychodzących połączeń na gniazdach nasłuchujących.

  • Aplikacja WSK udostępnia bufory danych do operacji transferu danych. Zmniejsza to liczbę prób skopiowania danych. Jeśli jednak aplikacja WSK przechowuje wiele operacji transferu danych w kolejce, aplikacja musi dostarczyć bufory danych do podsystemu WSK na potrzeby każdej operacji transferu danych w kolejce. W związku z tym aplikacja WSK może wymagać dodatkowych zasobów pamięci.

Korzystanie z funkcji wywołania zwrotnego zdarzeń

  • Podsystem WSK napędza operacje gniazda, co oznacza, że podsystem WSK powiadamia aplikację WSK o zdarzeniach gniazda przez wywołanie funkcji wywołania zwrotnego zdarzeń gniazda. Aplikacja WSK może wymagać bardziej złożonej synchronizacji ze względu na asynchroniczny charakter funkcji zwrotnych związanych ze zdarzeniami.

  • Aplikacja WSK nie używa IRP do operacji gniazda.

  • Aplikacja WSK nie musi kolejkować operacji gniazd. Podsystem WSK wywołuje funkcję wywołania zwrotnego zdarzeń aplikacji WSK zaraz po wystąpieniu zdarzeń gniazda. Jeśli aplikacja WSK może nadążyć za szybkością, z jaką wywoływane są funkcje zwrotne zdarzeń związane z gniazdem, wykorzystanie tych funkcji może zapewnić najwyższą wydajność i najmniejsze prawdopodobieństwo utracania datagramów lub połączeń przychodzących.

  • Podsystem WSK dostarcza bufory danych na potrzeby operacji transferu danych. Aplikacja WSK musi zwolnić z powrotem te bufory danych do podsystemu WSK natychmiast lub w rozsądnym czasie, aby podsystemowi WSK nie zabraknie zasobów pamięci. W związku z tym aplikacja WSK może potrzebować skopiowania danych z buforów, które są własnością podsystemu WSK, do własnych buforów danych.

Uwaga Powyższe listy nie muszą być wyczerpujące. Mogą istnieć inne kwestie, które należy wziąć pod uwagę podczas wybierania, która metoda jest najlepszym wyborem dla określonej aplikacji WSK.