Junior — Middle
V jakých případech jsou systémové volání rychlejší: v procesech PostgreSQL nebo v gorutinách uvnitř aplikace?
sobes.tech AI
Odpověď od AI
Systémové volání (syscalls) jsou sama o sobě vykonávána v jádře operačního systému a mají přibližně stejnou cenu bez ohledu na kontext, ze kterého jsou volána. Nicméně, rozdíly ve výkonu mohou vzniknout kvůli architektuře aplikace.
- V PostgreSQL je každý klientský požadavek zpracováván samostatným procesem. Volání systému z procesu PostgreSQL je přímý přechod do jádra.
- V Go jsou gorutiny lehké vlákna, která jsou plánována uvnitř jednoho nebo více systémových vláken. Volání systému z gorutiny ve skutečnosti probíhá ze systémového vlákna, na kterém je spuštěna.
Rychlost volání systému závisí na tom, jak rychle se aplikace dokáže přepínat mezi kontexty a spravovat vlákna.
Závěr:
- Systémová volání z procesů PostgreSQL obvykle nemají další režii spojenou s plánovačem, protože proces je samostatný kontext.
- V Go mohou gorutiny přepínat mezi úkoly rychleji, ale systémové volání se stále provádí v systémovém vlákně.
Tedy, systémová volání z procesů PostgreSQL a z gorutin v Go jsou přibližně srovnatelná z hlediska rychlosti. Nicméně v Go lze efektivněji spravovat velké množství paralelních operací bez vytváření mnoha procesů, což přináší výhodu v škálovatelnosti, ale ne ve rychlosti jednotlivého systémového volání.