Ideal Interprocess Communication

0

Quindi, c'è un flusso di lavoro che ritengo debba esistere. Potrebbe già esistere, e io non ne so nulla.

Considera il flusso di lavoro della riga di comando di Linux, il "motto" di Linux, più o meno. Hai un sacco di piccoli programmi, accettando input e producendo output. Ognuno fa bene una cosa, e l'utente li mette insieme per fare cose complicate. (In teoria ci sono controesempi, ma nel complesso, la mia esperienza è stata che questo è vero, e tende a funzionare bene.) Tuttavia, sento che ci sono alcuni problemi.

  1. Un determinato programma può accettare facilmente un input e produrre un output.
  2. Sia l'input che l'output sono una sequenza lineare di caratteri. (È discutibile se questo sia veramente un problema.)
  3. Il modello, così com'è, è alquanto incompatibile con le GUI.

Alternative a ciascun articolo nell'ordine:

  1. Un determinato programma ha un numero arbitrario di porte di input / output.
  2. Ogni porta ha un "tipo" specificato - binario non elaborato, video, testo, matrici di numeri, ecc. (La probabilità della guerra degli standard mi fa vacillare su questo punto, forse potrebbe essere solo contrassegnato come "16 bit raw PCM "o qualcosa del genere, ma tutti i dati sono fondamentalmente solo flussi binari non elaborati e spetta a te assicurarti che siano abbinati correttamente, come quando si esegue il piping dell'output da gzip ecc.)
  3. Una GUI mostrerebbe le sue porte I / O da qualche parte, e potresti trascinare da uno degli output di un programma a uno degli ingressi di un altro programma.

Considera, se vuoi, la seguente visione di un futuro glorioso: Si apre qualche formato video esoterico nel programma 1, che lo offre in un formato raw. Si trascina l'output su un altro programma 2, che divide il flusso in un'uscita video e un'uscita audio. Trascini il video da 2 ad un programma di filtraggio 3 in cui inverti i colori e l'audio da 2 ad un programma 4 simile ad Audacity, dove selezioni riverbero ed equalizzazione o qualcosa del genere. Si trascina da 3 e 4 indietro in un ricombiner 5, da 5 a un codificatore 6 e da 6 a un servizio di streaming 7. Quindi si preme go o qualcosa e si sta trasmettendo un video bizzarramente filtrato su Internet, perché è possibile .

Quindi, le mie domande effettive:

  1. Esiste già un modo per farlo, funzionale per un utente finale adesso?
  2. Ci sono librerie intese e progettate per consentire questo genere di cose?
  3. Ci sono ostacoli fondamentali a questo che ho trascurato?
  4. Eventuali altri commenti che ritieni debbano essere notati?
posta Erhannis 18.04.2018 - 23:57
fonte

2 risposte

2

Sistemi come quello che descrivi sono stati implementati. CORBA è simile (ma non proprio uguale) a quello che descrivi.

Apple ha implementato il loro OpenDoc standard molti anni fa ed è stato un grande flop. Permetteva a qualsiasi app di creare dati e qualsiasi altra app per incorporare tali dati nei loro documenti. L'idea (se ricordo bene) era che chiunque poteva creare un editor per un dato tipo di dati e chiunque poteva creare un componente che visualizzava i dati dati e si potevano usare questi componenti per creare documenti invece di creare un documento in una singola applicazione .

Microsoft aveva qualcosa di simile con OLE .

L'applicazione Automator di Apple consente di utilizzare una GUI per legare insieme altri componenti come gli script di shell, Javascript, AppleScript e varie funzionalità specifiche per l'applicazione. Sono sicuro che probabilmente ci sono app simili per altri sistemi operativi.

    
risposta data 20.04.2018 - 01:28
fonte
0

Hy, hai qualche difetto nel pensare. La comunicazione tra processi è piuttosto lenta, quindi quello che chiedi è la lettura / scrittura dei dati da e verso lo spazio di memoria condiviso. Il prossimo problema è la sincronizzazione qualsiasi streaming per il tuo scopo includerebbe mutex che lo renderebbero ancora più lento. Il modo più semplice per gestire cose del genere è salvare le immagini per dividere il flusso, ma se si dispone di 30 fps sarà una sfida. In ogni modo, avresti bisogno di gestire l'IPC e la sincronizzazione.

Una cosa è che è necessario definire qual è il tempo massimo che si considera per un set di dati. Cosa succede se quel protocollo di tomo si rompe? In generale, è necessario un gestore dati ad alte prestazioni con buffer triplo e gestione del buffer dell'anello che gestisca gli output di dati per altre app. Questo non è un compito piccolo e ci sono progetti che stanno provando cose simili.

    
risposta data 18.08.2018 - 22:10
fonte

Leggi altre domande sui tag