Come chiamare più di un programma da un singolo processo in modo efficiente?

-2

Voglio chiamare più di un processo dal programma principale che è scritto in C ++.

come chiamarli con il modo più efficiente dato che un processo può aprirsi e chiudersi più di una volta.

il programma può anche chiamare processi scritti in lingue diverse da C ++

    
posta ahmed nader 24.04.2018 - 20:53
fonte

2 risposte

3

Sembra molto simile a come CGI ha funzionato nei primissimi giorni di Internet. Ogni richiesta web avvierebbe un processo per restituire il contenuto della pagina.

Alla fine le prestazioni si sono ridotte e è stata trovata una soluzione alternativa.

Una soluzione è stata chiamata FastCGI. Con un'interfaccia FastCGI, il processo potrebbe essere lasciato aperto e caricato. Nuove richieste sono state inviate al processo tramite stdin e recuperate da stdout, come un CGI. La differenza principale era che il processo non era stato chiuso alla fine di una richiesta.

Ci sono molti problemi di gestione coinvolti come memoria, memorizzazione nella cache e processi inutilizzati. Esaminare come questi problemi sono stati risolti con FastCGI potrebbe eludere a una soluzione per te.

    
risposta data 25.04.2018 - 03:46
fonte
1

L'esecuzione di programmi nei processi è specifica del sistema operativo. L'unico modo standard per farlo è utilizzando il sistema che probabilmente non è adatto. Potresti utilizzare alcuni framework C ++ (come POCO o Qt o forse Boost ) che fornisce un'interfaccia simile ed è multipiattaforma.

BTW, senza più contesto e dominio dell'applicazione, la tua domanda è troppo generica . La neurochirurgia robotica, i sistemi di chat web, le competizioni di scacchi, il trading ad alta frequenza, ecc ... potrebbero tutti necessitare di un simile approccio, ma hanno diversi vincoli e richiedono approcci diversi

Supponi che il tuo sistema operativo sia Linux o POSIX (i dettagli contano).

Quello che vuoi fare è simile a una shell Unix specializzata. Devi avere familiarità con chiamate di sistema relative a loro. Quindi leggi qualcosa sulla programmazione di Linux, ad es. ALP o qualcosa di più recente.

Su Linux, creando un nuovo processo (con fork (2) ) e eseguire un programma in esso (con execve (2) ) è in genere abbastanza veloce (a pochi millisecondi), ma non così tanto (l'avvio di una dozzina di programmi e processi ogni secondo è ragionevole, a partire da migliaia di loro potrebbero non esserlo). Ovviamente, devi capire altre chiamate di sistema, ad es. wait (2) , pipe (2) , dup2 (2) , sondaggio (2) ecc. .

Potresti usare diversi pipe (7) -s e avere alcuni ciclo degli eventi intorno a sondaggio (2) per gestirli.

Potresti anche organizzare il tuo sistema con diversi programmi di più lunga durata usando qualche tipo di passaggio di messaggi con il tuo monitor. Esamina le tecniche RPC (forse JSONRPC )

Potresti definire un client-server modello (magari usando HTTP per questo, ad es. con librerie HTTP client come libcurl e server come libonion ). Potresti anche definire la tua applicazione protocollo basato su testo , ma assicurati di documentarla in modo preciso protocolli come SMTP , MQTT per l'ispirazione). Studia anche biblioteche come 0mq o MPI .

    
risposta data 25.04.2018 - 06:57
fonte

Leggi altre domande sui tag