Sobes.tech
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í.