Jaki jest najlepszy equvalient epoll / kqueue / select w systemie Windows?
Jaka jest najlepsza funkcja powiadamiania o zdarzeniach We/Wy w systemie Windows?
Przez best mam na myśli coś takiego ...
- nie ma limitu liczby deskryptorów plików wejściowych
- działa na wszystkich deskryptorach plików (pliki dyskowe, gniazda, ...)
- zapewnia różne tryby powiadomień (wyzwalanie krawędzi, wyzwalanie limitu)
4 answers
W Windows operacje asynchroniczne są wykonywane przez operacje na plikach, a nie przez deskryptor. Istnieje kilka sposobów oczekiwania na operacje na plikach, aby zakończyć się asynchronicznie.
Na przykład, jeśli chcesz wiedzieć, kiedy dane są dostępne w gnieździe sieciowym, wyślij żądanie odczytu asynchronicznego na gnieździe, a po jego zakończeniu dane były dostępne i zostały pobrane.
W Win32 operacje asynchroniczne wykorzystują OVERLAPPED
struktura zawierająca Stan o nieprzewidzianym IO operacja.
- Połącz pliki z portem zakończenia IO i wysyłaj asynchroniczne żądania IO. Gdy operacja zostanie zakończona, w kolejce pojawi się komunikat o zakończeniu, na który wątki robocze będą mogły czekać i pobierać je po ich zakończeniu. Do kolejki można również wstawiać wiadomości zdefiniowane przez użytkownika. Nie ma limitu liczby plików lub kolejkowanych wiadomości z portem zakończenia
- Wyślij każdą operację IO z wydarzeniem. Wydarzenie związane z operacja zostanie zasygnalizowana (oczekiwanie) po jej zakończeniu. Użycie
WaitForMultipleObjects
czekać na wszystkie wydarzenia na raz. Ma to tę wadę, że można czekać tylko naMAXIMUM_WAIT_OBJECTS
obiekty naraz (64). Można również czekać na inne typy zdarzeń w tym samym czasie (zakończenie procesu/wątku, muteksy, zdarzenia, semafory) - użyj puli wątków . Pula wątków może przyjmować nieograniczoną liczbę obiektów i operacji na plikach, aby czekać i wykonywać zdefiniowaną przez użytkownika funkcja po zakończeniu każdego.
- Użyj
ReadFileEx
iWriteFileEx
do kolejki asynchronicznych wywołań procedur (APCs) do wątku wywołującego iSleepEx
(lubWaitFor{Single|Multiple}ObjectsEx
) zAlertable TRUE
, aby otrzymać komunikat powiadamiający o każdej operacji po jej zakończeniu. Ta metoda jest podobna do portu zakończenia IO, ale działa tylko dla jednego wątku.
Jądro Windows NT nie rozróżnia gniazd, plików na dysku, rur itp. operacje na plikach wewnętrznie: wszystkie te opcje będą działać ze wszystkimi typami plików.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-19 21:01:56
Libuv
libuv
oferuje evented I / O Dla Unix i Windows i ma wsparcie dla gniazd, plików i rur. Jest to warstwa platformy węzła.js.
Więcej szczegółów na stronie: http://nikhilm.github.io/uvbook/introduction.html
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-16 10:26:42
Nie ma jeszcze, o ile mi wiadomo. Razem z przyjacielem pracujemy nad implementacją open source Windows epoll (link poniżej), ale napotykamy problemy, zastanawiając się, jak sprawić, by działała ona tak samo jak implementacja Linuksa.
Obecne przeszkody:
- w Linuksie deskryptory plików i deskryptory gniazd są wymienne, ale w Windows tak nie jest. Oba muszą być zgodne z implementacją epoll.
- W Windows trudno jest uzyskać jądro wydarzenia... tak działa epoll w Linuksie. Domyślamy się, że program korzystający z naszej wieloplatformowej biblioteki epoll będzie działał zauważalnie wolniej w systemie Windows niż Linux.
Postaram się wrócić i zaktualizować ten post w miarę postępów w projekcie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-15 22:13:33
Funkcja Select () jest POSIX i może być używana w systemie windows, w tym " winsock.h " lub " winsock2.h".
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-02 10:30:40