Recentemente ho imparato a conoscere i diversi modi in cui le lingue gestiscono la concorrenza sotto il cofano e vorrei saperne un po 'di più sulle carenze del threading M: N. Per favore perdonami se ho dei fatti sbagliati nei paragrafi seguenti.
Comprendo i loop di eventi (almeno lo stile del ciclo di eventi utilizzato in un nodo simile alla lingua) e in che modo gli svantaggi principali sono la scrittura di codice in uno stile asincrono, un sacco di callback nidificati, non scalabile in più di un core (senza creare più processi), le attività ad alta intensità di CPU rallentano il ciclo e questa logica complessa finisce per far crescere lo stack delle chiamate molto. Il vantaggio, naturalmente, è che i problemi con il threading sono, per la maggior parte, astratti.
Ho visto M: N essere pubblicizzato come la soluzione ai problemi del ciclo degli eventi, e nella mia esperienza personale con alcuni Erlang e Go è stato per lo più vero.
Ora la mia domanda è, indipendentemente dalle sfumature delle diverse VM esistenti e dai linguaggi di programmazione (non voglio che questa sia una discussione Node vs Go vs Erlang), ci sono degli svantaggi inerenti a un modello M: N dato che hai un programmatore perfettamente scritto? Qualcosa di simile agli svantaggi che ho elencato sopra sui loop di eventi.