node.js Addons C ++ per fare tutti i principali calcoli [chiuso]

1

Un limite importante di node.js è la sua esecuzione a thread singolo e il fatto che JS è lento con i calcoli.

Quali sono i vantaggi / gli svantaggi di utilizzare C ++ per eseguire il sollevamento pesante dell'applicazione mentre si utilizza il nodo come "codice colla" ? Ovviamente ci sono rischi per la sicurezza che usano C ++, ma supponiamo per il ragionamento che il codice C ++ sia ben testato e perfetto.

    
posta zelcon5 21.01.2016 - 08:42
fonte

2 risposte

6

Per questa risposta, assumerò che il codice C ++ sia SOLO ben collaudato e perfetto per la sicurezza. Se in realtà sarebbe perfetto , non avresti comunque richiesto questa domanda ...

Questa è una raccolta generale delle prime cose che mi sono venute in mente, non una lista completa.

svantaggi tecnici dell'uso di C ++:

(o praticamente qualsiasi addon della lingua esterna)

  • Comunicazione: Avrai a che fare con qualsiasi comunicazione tra il tuo nodeapp e il codice C ++. Probabilmente tutti i risultati dovranno passare attraverso una sorta di dispatcher nel nodo, il che può essere problematico, se i tipi di messaggio sono molto eterogenei.

  • Interoperabilità: C'è una buona possibilità, si eseguiranno problemi di os-compatibilità quando si usa c ++. Dato che il C ++ deve essere compilato, ci sono buone possibilità che dopo aver ottimizzato il processo di compilazione per un determinato sistema operativo, sarà difficile migrarlo a un altro. Questo potrebbe essere particolarmente problematico se non si ospita il proprio server, ma si utilizza il provider PaaS.

  • Un codice più grande: Manutenzione e debug può (lo stile di codice errato può renderlo ancora più difficile) diventa molto più doloroso, se la base di codice si estende su più sistemi (e forse anche distribuiti).

social svantaggi :

  • Hai una base di codice diviso e dovrai assumere sviluppatori in grado di sviluppare un buon codice javascript AND C ++ (che potrebbe rivelarsi problematico) o assumere sviluppatori separati, che è più costoso e uno sviluppatore non può facilmente intervenire per un altro se lui / lei è assente.

vantaggi tecnici :

  • Una gamma più ampia di librerie. Non sei più limitato a node / js-libraries, ma puoi usare anche tutte le librerie C ++. Ci sono molte librerie, che non hanno eguali in js. Le librerie matematiche o scientifiche particolarmente complesse in generale, sono molto difficili da implementare in js, a causa del linguaggio sottostante.
  • Calcolo più veloce. A meno che non ci sia un sovraccarico importante nella gestione e nella comunicazione con C ++, ci sono buone probabilità che i casi di utilizzo intensivo di calcolo possano beneficiare del C ++.
  • Poiché C-Languages è più vicino all'hardware rispetto ai sistemi a maggiore astrazione come js o node, nella maggior parte dei casi è possibile ottimizzare il software in modo ottimale per l'attività in corso.
  • Come puoi ottimizzare meglio, puoi anche usare la parallelizzazione più avanzata. Questo potrebbe essere un calcolo locale o persino un massiccio HPC (ad esempio con OpenMP, MPI ...). Un quadro per il calcolo scientifico sarebbe interessante per questo.

vantaggi social :

  • poiché il nodo e il C ++ non sono strettamente accoppiati, è possibile esternalizzare lo sviluppo del C ++ a un'altra società più specializzata e fornire loro solo le interfacce necessarie. (dovresti, ovviamente, averlo a posto comunque, ma c'è una buona probabilità che la tua base di codice media non sia così modulare come vuoi tu: -))

  • Trovare e assumere persone specializzate potrebbe essere più facile. Anche se può essere difficile trovare sviluppatori che siano esperti nel calcolo AND del nodo AND in C ++, è probabilmente più facile trovare persone specializzate, che sono ad esempio molto brave in parallelizzazione o calcolo statistico in C ++ (o in qualsiasi altro linguaggio più specializzato come R)

Ancora una volta, questa non è una lista completa, solo alcune cose che mi sono venute in mente. Inoltre, questo non è proprio specifico per C ++, ma piuttosto generico, per qualsiasi addon esterno.

    
risposta data 21.01.2016 - 09:57
fonte
4

Non so esattamente cosa intendi per rischi per la sicurezza, con la necessità di digitare typecheck parametri passati usando i metodi is* sugli argomenti o ottenendo la rappresentazione del valore usando v8::Value , gli argomenti passati sono abbastanza sicuri da usare.

Se hai paura della gestione manuale della memoria e consideri questo un rischio (che non è nemmeno più spaventoso, con std::move e RAII), allora forse il modulo C ++ non è la strada da percorrere, finché non impari a farlo correttamente.

Ma alla domanda. Il vantaggio principale è che è C ++ e, come hai già detto, il codice C ++ ben scritto ti ricompenserà con la massima velocità.

Ho provato solo i componenti aggiuntivi C ++ di Node.js per operazioni di dati molto semplici, quindi non posso parlare per un'applicazione di dimensioni aziendali, ma dall'esperienza che ho avuto, lo sviluppo è piuttosto semplice e abbastanza facile da implementare.

Il principale svantaggio? È C ++. C ++ non è affatto un linguaggio di programmazione facile. Sebbene i nuovi standard lo rendano sempre più amichevole per gli sviluppatori, è ancora molto complicato.

Oltre a questo, non c'è davvero un problema con l'incollaggio dei due codebase (JavaScript e C ++) insieme e se conosci il C ++, vai avanti e provalo tu stesso.

    
risposta data 21.01.2016 - 09:45
fonte

Leggi altre domande sui tag