Quale potrebbe essere un motivo per lo sviluppatore di applicazioni server multipiattaforma per far funzionare la sua app in più processi?

2

Consideriamo uno sviluppo di app per server - pesantemente carico di problemi con grandi flussi di dati. Un'app verrà eseguita su un server potente. Un'app server verrà sviluppata sotto forma di applicazione multipiattaforma, lavorando su Windows, Mac OS X e Linux.

Quindi stesso codice, molte piattaforme per l'architettura server indipendente. Ci chiediamo quali sono i vantaggi della distribuzione di applicazioni non solo sui thread ma anche sui processi, per i programmatori e gli utenti finali del server?

Alcuni mi hanno detto che anche con 48 core, 4 thread di processo sarebbero stati condivisi tramite OS attraverso tutti i core, è vero?

    
posta Kabumbus 14.03.2011 - 00:17
fonte

1 risposta

8

Un paio di vantaggi:

  1. Ogni processo ha uno spazio indirizzo separato. Se si esegue su un sistema operativo a 32 bit, questo può essere un vantaggio perché è possibile caricare il server con molta RAM e anche se ogni processo può accedere solo a 4 GB ciascuno, se hai più processi, allora possono utilizzare la quantità di RAM disponibile. Se stai scrivendo per 64-bit (e ti suggerirei che probabilmente dovresti esserlo), questo è meno preoccupante (sebbene sia ancora un vantaggio da un punto di vista dell'isolamento, in cui un processo non può danneggiare lo spazio degli indirizzi di un altro processo) .
  2. Ogni processo è isolato dall'altro. Se uno si blocca, gli altri possono continuare a funzionare. È più difficile rendere i thread resilienti perché anche se potresti essere in grado di recuperare da un'eccezione, il processo può ancora essere in uno stato insistente che può rappresentare un problema per i processi a esecuzione prolungata.
  3. Sarà più facile distribuire l'applicazione su più macchine in futuro. Se stai già facendo l'IPC tra i processi fin dall'inizio, allora fare IPC su macchine non è così difficile. Se inizi tutto in un unico processo, allora sarà più difficile distribuirlo tra i server se / quando diventerà un requisito.

Alcuni svantaggi:

  1. L'architettura sarà più complicata. Poiché non puoi (facilmente) condividere lo spazio degli indirizzi, devi subito creare complicati meccanismi IPC. Tecnicamente, puoi condividere lo spazio degli indirizzi, ma poi elimina i vantaggi n. 1 e amp; # 3 sopra ...
  2. Devi essere in grado di gestire i processi che si bloccano. Questo è un po 'il corollario del n. 1 (ovvero è più complesso), ma se andavi con un modello a processo singolo, allora puoi "gestire" "un crash semplicemente riavviando l'intero processo. Con più processi, devi essere in grado di gestire singoli processi in modo anomalo.

In termini di prestazioni multi-threading, è improbabile che ci sia alcuna differenza tra avere più thread e avere processi separati. Tecnicamente, i commutatori di contesto tra processi possono essere un po 'più costosi, ma in genere possono essere comunque ridotti a icona.

Inoltre, per inciso, non sono personalmente convinto che "alte prestazioni" e "multipiattaforma" possano andare bene insieme in generale. Le architetture delle diverse piattaforme sono abbastanza diverse, per la maggior parte, e ciò che funziona bene su Linux non funzionerà molto bene su Windows (o viceversa).

    
risposta data 14.03.2011 - 00:46
fonte

Leggi altre domande sui tag