GNU/Linux >> Znalost Linux >  >> Linux

Kdo používá signály POSIX v reálném čase a proč?

Je to stará otázka, ale přesto.

Vlákna POSIX na Linuxu v glibc (NPTL) jsou implementována pomocí dvou signálů v reálném čase. Jsou před uživatelem skryty (nastavením min/max číselných konstant). Všechny události, kde volání knihovny musí být šířeno do všech vláken (jako setuid ) se provádějí prostřednictvím těchto:volající vlákno pošle signál všem vláknům, aby aplikovaly změnu, čeká na potvrzení a pokračuje.


Asynchronní I/O.

Signály v reálném čase jsou mechanismem, kterým jádro informuje váš systém o dokončení I/O operace.

struct aiocb vytvoří spojení mezi asynchronním I/O požadavkem a číslem signálu.


Nejprve si všimněte, že Benova odpověď je správná. Pokud mohu říci, celý účel signálů v reálném čase v POSIX je jako mechanismus doručování v reálném čase pro AIO, upozornění na frontu zpráv, vypršení platnosti časovače a signály definované aplikací (jak interní, tak meziprocesové).

Díky tomu jsou signály obecně opravdu špatným způsobem, jak dělat věci:

  • Obslužné rutiny signálů jsou asynchronní, a pokud nezajistíte, že nepřeruší funkci async-signal-unsafe, mohou používat pouze funkce async-signal-safe, což značně omezuje jejich možnosti.
  • Obsluhy signálů jsou globálním stavem. Knihovna nemůže používat signály bez smlouvy s volajícím programem ohledně toho, které signály smí používat, zda je smí přerušit systémové volání atd. A obecně platí, že globální stav je jen Špatná věc .
  • Pokud používáte sigwait (nebo Linux signalfd rozšíření) spíše než manipulátory signálů pro zpracování signálů, nejsou o nic lepší než jiné mechanismy IPC/oznámení a stále jsou potenciálně horší.

Asynchronní IO se mnohem lépe dosahuje ignorováním špatně navrženého POSIX AIO API a pouhým vytvořením vlákna pro provádění normálního blokování IO a volání pthread_cond_signal nebo sem_post až operace skončí. Nebo, pokud si můžete dovolit trochu výkonových nákladů, můžete si právě načtená data přeposlat zpět přes rouru nebo pár zásuvek a nechat hlavní vlákno zpracovat asynchronně – číst běžné soubory s select nebo poll stejně jako byste to dělali sockets/pipes/ttys.


Linux
  1. Hašování hesel a proč to potřebujeme

  2. Linux – proč používáme Su – a nejen Su?

  3. Omezit najít výstup a vyhnout se signálu 13?

  1. Kdy a proč bych měl používat Apt-get Update?

  2. Vztah mezi řídicími znaky, signály a terminálem?

  3. Proč je to Rm -rf a ne Rmdir -rf?

  1. Proč Deis a co to je?

  2. IPC využívající signály na linuxu

  3. Proč používáme su – a nejen su?