Portál AbcLinuxu, 12. května 2025 08:06

Dotaz: Knihovna s event looper

5.2.2016 13:31 Petr
Knihovna s event looper
Přečteno: 277×
Odpovědět | Admin
Pro svůj projekt hledám knihovnu implementující nějakou smyčku událostí, v C.

Měla by umět pollovat file descriptory a zavolat příslušný callback. Je mi jedno, jestli bude používat poll nebo epoll, moc jich nebude. Měla by obsahovat prioritní frontu, kam můžete přidat callback. Pro případ, kdy by tohle nebylo thread safe, tak ještě další obyčejnou frontu, kam můžete přidat callback z jiného vlákna a bude spuštěn z vlákna, ve kterém běží smyčka. Podpora časovačů, rozlišení stačí na milisekundy.

Co by neměla mít. Jiné závislosti než C knihovna a rozumně starý linuxový kernel (řekněme 4.0+). Neměla by mi nutit nějaké abstrakce nad dalšími věcmi jako vlákna, mutexy, apod, nejlépe, kdyby je neměla vůbec.

Neměla by moc alokovat, nejlépe jen při jejím vytvoření. Např. přidání callbacku by mělo být no-fail za předpokladu, když už mám vytvořenou strukturu pro ten callback, třeba i na zásobníku (kdy pak je moje povinost zajistit, že žije dost dlouho).

Zkoušel jsem se podívat na libuv. Ale. Příliš mnoho abstrakcí nad nepotřebnými věcmi (vlákna, soubory). Používá identifikátory vyhrazené pro implementaci překladače a C knihovny (dvojtá podtržítka, struktury s _t na konci). Spousta zbytečných vlastností. Volá na některých místech abort(), když něco selže, to je nepřijatelné. Nedovoluje mi zavolat callback v rámci smyčky běžící v druhém vlákně (uv_async nedostačuje, ten musíte předvytvořit ve vlákně, kde smyčka běží a v durhém vlákně ho smíte jen poslat a né modifikovat). Má fallbacky pro různá systémová volání, když např. není podporován někde O_CLOEXEC či novější systémové volání, kde se dá tento flag předat, udělá fallback na staré a CLOEXEC nastaví až potom přes fnctl. To je nepřijatelné, protože mi vyváří race-condition ve vícevláknové aplikaci, správně je vrátit chybu.

Přemýšlím napsat něco vlastního, ale pokud už něco existuje, bylo by to lepší.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

5.2.2016 15:39 vbar
Rozbalit Rozbalit vše Re: Knihovna s event looper
Odpovědět | | Sbalit | Link | Blokovat | Admin
libevent
6.2.2016 00:27 Jardík
Rozbalit Rozbalit vše Re: Knihovna s event looper
Odpovědět | | Sbalit | Link | Blokovat | Admin
Kdyby nevadila ta alokace, tak bych doporučil systemd, respektive libsystemd a jeho součást sd-event. Bohužel to alokuje.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.