GNU/Linux >> Znalost Linux >  >> Linux

Linux a porty pro dokončení I/O?

Pokud hledáte něco přesně jako IOCP, nenajdete to, protože to neexistuje.

Windows používá model upozornění na dokončení (proto I/O Completion Porty). Některé operace spustíte asynchronně a po dokončení této operace obdržíte upozornění.

Linuxové aplikace (a většina dalších unixových aplikací) obecně používají upozornění na připraveném modelu. Obdržíte upozornění, že ze soketu lze číst nebo do něj zapisovat bez blokování. Poté provedete I/O operaci, která nebude blokována.

U tohoto modelu to nepotřebujete asynchronní I/O. Data jsou okamžitě zkopírována do/z vyrovnávací paměti soketu.

Programovací model pro toto je poněkud ošidný, a proto existují knihovny abstrakce jako libevent. Poskytuje jednodušší programovací model a odstraňuje rozdíly v implementaci mezi podporovanými operačními systémy.

I ve Windows je upozornění na připravený model (select nebo WSAwaitForMultipleEvents), na které jste se možná již dříve dívali. Nemůže se škálovat na velký počet soketů, takže není vhodný pro vysoce výkonné síťové aplikace.

Nenechte se tím odradit – Windows a Linux jsou zcela odlišné operační systémy. Něco, co se na jednom systému špatně škáluje, může velmi dobře fungovat na druhém. Tento přístup ve skutečnosti funguje velmi dobře na Linuxu, s výkonem srovnatelným s IOCP na Windows.


IOCP se na různých platformách UNIX vyslovuje jako "asynchronní I/O":

  • POSIX AIO je standard
  • Zdá se, že jádro AIO, epoll a io_uring jsou implementace specifické pro Linux
  • Kqueue je implementace *BSD a Mac OSX
  • Rozhraní pro předávání zpráv (MPI) je možnost pro vysoce výkonné výpočty
  • povinná reference Boost – Boost.Asio

Linux
  1. Jak získat přístup k souborovým systémům Linux ve Windows 10 a WSL 2

  2. Interoperabilita Windows a Linuxu:Pohled na Sambu

  3. Jak duální bootování Windows 10 a MX Linux

  1. Nova-agent (Linux) a agent Rackspace (Windows)

  2. Jak děláte neblokující I/O konzoly na Linuxu v C?

  3. Ladění linuxové I/O latence

  1. Zprovozněte a zprovozněte podman na Windows pomocí Linuxu

  2. Vytvořte SSH spojení mezi Windows a Linuxem

  3. Jak zastavit „nepřerušitelný“ proces v Linuxu?