Probíhá hlasování o používání LLM při vývoji Debianu. Vývojáři Debianu mají na výběr 9 možností (návrhy A až H a žádný z nich).
Omarchy je linuxová distribuce s dlaždicovým správcem oken Hyprland. Založena je na Arch Linuxu. Vydána byla v nové major verzi 4.0.0 - The Quattro Release. Videopředstavení na YouTube. Celý desktop shell byl přepsán do Quickshellu. Přidána byla podpora pluginů.
Francouzská Ústavní rada zamítla zákaz používání sociálních sítí dětem mladším 15 let. Francouzská obdoba ústavního soudu uvedla, že opatření představuje nepřiměřený zásah do svobody projevu. Francouzský parlament zákaz schválil na konci července, začít platit měl od září. Šlo o první zákaz sociálních sítí pro děti v Evropě. Členové Ústavní rady se domnívají, že ustanovení „představuje zásah, který není přiměřený, nezbytný ani
… více »Open-source trackball Ploopy Adept má novou verzi nazvanou A+. Stále jde o symetrický desktopový trackball s šasi z 3D tiskárny a firmwarem QMK. Novinkami jsou dvojice tlačítek, jimiž půjde také otáčet, a volitelná opěrka ruky. Funkcionalita firmwaru je rozšířena o gesta, vrstvy a možnost konfigurace za běhu. Schémata a kód jsou jako obvykle na GitHubu. A+ půjde předobjednat za 99 CAD (bez dopravy a cla/DPH).
Prusa Research představil nové modely svých 3D tiskáren: Prusa XL+, CORE One+ (Gen 2) a CORE One L+.
Crown je multiplatformní open source herní engine. Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT a GPLv3+. Byla vydána nová verze 0.64. Vyzkoušet lze online demo.
NVIDIA na konci ledna vydala v beta verzi nativního linuxového klienta své cloudové herní služby GeForce NOW. Včera oznámila ukončení beta verze a oficiální podporu Linuxu.
Byla vydána nová verze 3.5.0 nástroje pro inkrementální kopírování souborů rsync (Wikipedie). Přehled oprav a vylepšení v souboru NEWS. Řešeno je 33 zranitelností.
Organizace Apache Software Foundation (ASF) vydala verzi 31 integrovaného vývojového prostředí a vývojové platformy napsané v Javě NetBeans (Wikipedie). Přehled novinek na GitHubu. Instalovat lze také ze Snapcraftu a Flathubu.
Firma IBM uvedla svůj první mikropočítač Personal Computer před 45 lety, v srpnu 1981. Základní konfigurace modelu 5150 za 1 565 tehdejších dolarů obsahovala desktop s Intel 8088 a 16KB RAM, Color Graphics Adapter a klávesnici. Právě klávesnice Model F/XT vybavené kapacitními spínači, vlivné a s převodníkem dodnes použitelné, připomíná sběratelský web Admiral Shark's Keyboards.
Jednoduché je to v případech, kdy máme k dispozici souborové deskriptory. Ty použijeme ve volání select(), poll() nebo epoll() a hned se dozvíme, co se stalo. Problém je ovšem v tom, že tyto deskriptory máme jen pro omezený okruh událostí. Pro mnohé události (asynchronní I/O, časovače, skončení podřízeného procesu atd.) musíme spoléhat na signály - a ty s výše uvedeným nejdou příliš dohromady.Ad asynchronní I/O a deskriptory - píšeš, že jediným skutečně bezpečným způsobem zpracování signálů je volání
sigwait(). Co je špatně na způsobu, kdy se při zpracování signálu SIGIO pomocí select() otestují deskriptory a příslušně se zareaguje? (Za předpokladu, že deskriptorů není příliš mnoho)
sigwait() (a samozřejmě také sigwaitinfo() a sigtimedwait()) má tu výhodu, že se zpracuje vždy právě jeden signál (a ostatní zůstávají blokované) a nepoužívá se - není potřeba - asynchronní handler. Při jiném řešení už nastávají komplikace s rozlišováním, které všechny signály vlastně přišly. Tak jako tak tam ale zůstane problém s výkonností, protože select/poll operace je obecně O(n).
int main() {
struct sigaction sigakce;
void io_sigio (int i);
void casovano (int i);
...
sigakce.sa_handler = io_sigio;
sigfillset (&sigakce.sa_mask);
sigakce.sa_flags = 0;
sigaction (SIGIO, &sigakce, NULL);
sigakce.sa_handler = casovano;
sigaction (SIGALRM, &sigakce, NULL);
for (;;) {pause();}
}
Program má jenom reagovat na události - příchod dat ze sítě a periférií a na časovač, takže čeká v nekonečné smyčce.
Jestli jsem to dobře pochopil, tak při použití sigwait() by program v nekonečné smyčce volal tuto funkci a rozhodoval, jaký signál přišel a jak se zachovat.
Při jiném řešení už nastávají komplikace s rozlišováním, které všechny signály vlastně přišly.To znamená, že když nepoužívám sigwait() a přijde víc signálů najednou, že se některé zahodí a nezpracují? Já měl zato, že se nejprve zavolá obsluha jednoho a pak druhého.
Tak jako tak tam ale zůstane problém s výkonností, protože select/poll operace je obecně O(n).Jasně, proto jsem psal, že předpokládám, že deskriptorů je málo (tento případ rozhodně není to, co je popsáno v blogu - tj. server s mnoha síťovými spojeními, otevřenými soubory apod.)
volatile (= rychlost dolů). A tak dále.
Jestli jsem to dobře pochopil, tak při použití sigwait() by program v nekonečné smyčce volal tuto funkci a rozhodoval, jaký signál přišel a jak se zachovat.
sigwait() vrací (resp. zapisuje přes pointer) číslo signálu, který přišel. Funkce sigwaitinfo() a sigtimedwait() dělají totéž, ale navíc ještě poskytují další informace (např. identifikátor časovače, PID ukončeného potomka, PID procesu, který zavolal kill() apod.).
Všechny tyto funkce fungují tak, že se zavolají s blokovanými signály, tyto se uvnitř odblokují, a když přijde první signál (nebo už nějaký čeká), zase se všechny signály zablokují a vyskočí to ven z funkce. To vše atomicky. Pak lze bezpečně a synchronně dělat cokoliv. Takže se to používá tak, že se v nekonečné smyčce volá sigwait() a vždy se podle čísla signálu zjistí, jaká událost nastala.
To znamená, že když nepoužívám sigwait() a přijde víc signálů najednou, že se některé zahodí a nezpracují? Já měl zato, že se nejprve zavolá obsluha jednoho a pak druhého.Signál se "zahodí" jen v jediném případě - že se jedná o obyčejný (klasický POSIXový, ne-realtime) signál a již nějaký čeká na zpracování. Ovšem když přijde více signálů "najednou" (tedy těsně po sobě), začne se zpracovávat jeden, a pokud ty další nejsou blokované, může kdykoliv začít obsluha jiného (s jiným číslem). Takže to doběhne třeba do půlky handleru a v tu chvíli začne obsluha jiného signálu. Blokace v handleru to úplně neřeší, protože se nemusí stihnout (i když toto není většinou tragédie). Horší ale je, že jsou to pro každý handler 2 syscally navíc, což sežere dost času. Tohle je výhoda
sigwait(), že takové problémy se nemusejí vůbec řešit.
Tiskni
Sdílej: