Ś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ę.

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