Światłowód (informatyka)
W informatyce włókno jest szczególnie lekką nitką wykonawczą .
Podobnie jak nici, włókna współdzielą przestrzeń adresową . Jednak włókna wykorzystują wielozadaniowość kooperacyjną , podczas gdy wątki wykorzystują wielozadaniowość z wywłaszczaniem . Wątki często zależą od harmonogramu wątków jądra, aby uprzedzić zajęty wątek i wznowić inny wątek; włókna poddają się uruchamianiu innego włókna podczas wykonywania.
Nici, włókna i współprogramy
Kluczowa różnica między włóknami a wątkami jądra polega na tym, że włókna wykorzystują przełączanie kontekstu w ramach współpracy zamiast wyprzedzającego podziału czasu. W efekcie włókna rozszerzają taksonomię współbieżności:
- na jednym komputerze może działać wiele procesów
- w ramach jednego procesu może działać wiele wątków
- w jednym wątku może działać wiele włókien
Włókna (czasami nazywane układającymi się w stos współprogramami lub współprogramowanymi wątkami w trybie użytkownika) i współprogramy bez stosów (maszyny stanu syntetyzowane przez kompilator) reprezentują dwa odrębne narzędzia programistyczne o ogromnych różnicach w wydajności i funkcjonalności.
Zalety i wady
Ponieważ włókna współpracują wielozadaniowo, bezpieczeństwo wątków jest mniejszym problemem niż w przypadku wątków zaplanowanych z wyprzedzeniem, a konstrukcje synchronizacyjne, w tym spinlocks i operacje atomowe , są niepotrzebne podczas pisania kodu światłowodowego, ponieważ są one niejawnie synchronizowane. Jednak wiele bibliotek udostępnia włókno pośrednio jako metodę przeprowadzania nieblokującego wejścia/wyjścia ; w związku z tym zaleca się pewną ostrożność i czytanie dokumentacji. Wadą jest to, że włókna nie mogą wykorzystywać wieloprocesorowych bez użycia wątków z wywłaszczaniem; jednak model gwintowania M: N bez wątków bardziej wywłaszczających niż rdzenie procesora może być bardziej wydajny niż czyste włókna lub czysto wywłaszczające wątki.
W niektórych programach serwerowych włókna są używane do miękkiego blokowania samych siebie, aby umożliwić kontynuację pracy ich jednowątkowych programów nadrzędnych. W tym projekcie światłowody są używane głównie do dostępu I/O, który nie wymaga przetwarzania przez procesor. Pozwala to głównemu programowi kontynuować to, co robi. Światłowody przekazują sterowanie jednowątkowemu programowi głównemu, a po zakończeniu operacji wejścia/wyjścia włókna kontynuują pracę w miejscu, w którym zostały przerwane.
Wsparcie systemu operacyjnego
Mniej wsparcia ze strony systemu operacyjnego jest potrzebne dla włókien niż dla wątków. Można je zaimplementować w nowoczesnych uniksowych przy użyciu funkcji bibliotecznych getcontext, setcontext i swapcontext w ucontext.h
, jak w GNU Portable Threads , lub w asemblerze jako boost.fiber .
W systemie Microsoft Windows włókna są tworzone przy użyciu wywołań ConvertThreadToFiber
i CreateFiber
; aktualnie zawieszone włókno można wznowić w dowolnej nici. Pamięć lokalna światłowodowa, analogiczna do pamięci lokalnej wątkowej , może być używana do tworzenia unikalnych kopii zmiennych.
Symbian OS zastosował podobną koncepcję do światłowodów w swoim Active Scheduler. Aktywny obiekt zawierał jedno włókno, które miało zostać wykonane przez Active Scheduler po zakończeniu jednego z kilku zaległych wywołań asynchronicznych. Kilka aktywnych obiektów mogło czekać na wykonanie (na podstawie priorytetu), a każdy z nich musiał ograniczyć własny czas wykonania.
Przykłady implementacji światłowodów
Włókna mogą być implementowane bez obsługi systemu operacyjnego, chociaż niektóre systemy operacyjne lub biblioteki zapewniają ich wyraźną obsługę.
- Win32 dostarcza API światłowodowe (Windows NT 3.51 SP3 i nowsze)
- Biblioteki C++ Boost mają klasę światłowodu od wersji Boost 1.62
- Ruby miał zielone wątki (przed wersją 1.9)
- Netscape Portable Runtime (zawiera implementację światłowodów w przestrzeni użytkownika)
- żeberka2
- PHP od wersji 8.1
Zobacz też
Linki zewnętrzne
- Przenośne wątki GNU
- „Przenośna biblioteka Coroutine” . Darmowy kod .
- Fibre Pool Obsługująca wiele rdzeni platforma C++ oparta na światłowodach dla systemu Microsoft Windows.
- Wątki stanowe
- Protowątki
- żeberka2
- włókno wzmacniające