Come è il server A più veloce del server B in alcuni (o tutti) casi se B impiega più attività parallele?

0

Dopo aver svolto ricerche sui moderni server Web, ritengo di essere piuttosto ignorante quando si tratta di progettazione di server e gestione simultanea delle attività sia dal sistema operativo che dal server. Comprendo alcune importanti funzionalità di base come il blocco di thread / processi e il fatto che il sistema operativo eseguirà il passaggio da un thread bloccato a un thread pronto. Tuttavia, non penso di avere una comprensione intuitiva abbastanza buona dei costi generali di vari progetti sotto il paradigma multiprocessing.

In che modo esattamente un server, o qualsiasi programma per quel problema, che elabora richieste in parallelo su tutti i core / processori disponibili può essere più lento di un server che lo fa solo con uno o pochi? Un costo di cui sono a conoscenza finora è che leggere / scrivere la quantità di memoria necessaria per ogni attività parallela è più costoso che per uno. Capisco questo punto, ma in quali casi questo costo non supera le prestazioni aggiuntive di eseguire un'attività in coda in parallelo?

Capisco che l'architettura dei server può essere molto dettagliata e complicata, ma qualsiasi comprensione fondamentale che viene offerta sarebbe molto utile. Questa domanda non è stata in grado di capire come Node.js, che non massimizza l'utilizzo principale, possa essere più veloce di Nginx (che ho letto). Entrambi hanno "IO asincrono", il nodo lo fa solo meglio?

    
posta Dan 04.08.2016 - 19:36
fonte

2 risposte

2

Ci sono diversi fattori coinvolti. Principalmente, non è immediato determinare cosa stiamo misurando e a quale scopo .

Ad esempio, un sistema che serve una richiesta in 12 ms è più lento di un sistema che serve una richiesta in 10 ms ...

... ma il primo sistema può servire otto richieste in parallelo, quindi può inviare ottanta richieste nel momento in cui il secondo può solo inviare dodici. Il tempo per la richiesta di una singola è più lungo, ma il tempo per una serie di richieste di navigazione è più breve.

Successivamente, servire una risorsa non è necessariamente sempre la stessa cosa. Un sistema in grado di eseguire una cache in memoria efficiente potrebbe impiegare 10 ms per servire la prima istanza e quindi 1 ms per servire tutti gli altri. Quindi il caching, server a processo singolo invia centodiciotto richieste invece di dodici.

Ecco perché la scelta di uno specifico server (e architettura) deve essere almeno in parte influenzata da cosa e come è richiesto, e perché spesso non c'è un sistema singolo dietro un sito Web, ma diversi (CDN, cache statica, multiplexer, server applicazioni, tutti con diversi livelli di ridondanza).

    
risposta data 04.08.2016 - 20:32
fonte
0

Quando le persone sono "parallele", pensano "velocità". sbagliato.

Lo scopo del multi-threading in un server è principalmente per la semplicità della programmazione. Salva solo il tempo se i thread sono vincolati alla CPU e possono sfruttare più core.

Di solito i thread non sono legati alla CPU, sono vincolati all'I / O. La semplicità deriva da ognuno dei molti thread che guardano un flusso sincrono, piuttosto che un thread che tenta di gestire gli eventi su centinaia di flussi di input asincroni.

    
risposta data 04.08.2016 - 22:56
fonte

Leggi altre domande sui tag