Quando si scrive un'interfaccia all'hardware su un bus di comunicazione, i tempi di comunicazione possono talvolta essere fondamentali per il funzionamento di un dispositivo. Pertanto, è comune per gli sviluppatori creare nuovi thread per gestire le comunicazioni.
Può anche essere una pessima idea avere un sacco di thread nel tuo sistema, e nel caso in cui tu abbia più dispositivi hardware potresti avere molti thread che non hanno il controllo dell'applicazione principale.
Certamente può essere comune avere due thread per dispositivo, uno per la lettura e uno per la scrittura.
Sto cercando di determinare i pro e i contro dei due diversi modelli a cui riesco a pensare e mi piacerebbe l'aiuto della comunità di Programmers.
-
Ogni istanza del dispositivo riceve i propri thread (o condivide un thread per un dispositivo di comunicazione). Può esistere un thread per la scrittura e uno per la lettura. Le scritture richieste a un dispositivo dall'API sono memorizzate nel buffer e gestite dal thread del writer. Il thread di lettura esiste in caso di blocco delle comunicazioni e utilizza le richiamate per trasferire i dati letti all'applicazione. Il tempo delle comunicazioni può essere gestito dal thread delle comunicazioni.
-
I dispositivi non hanno i propri thread. Invece le richieste di lettura e scrittura sono accodate / bufferizzate. L'applicazione chiama quindi una funzione "DoWork" sull'interfaccia e consente a tutte le operazioni di lettura e scrittura di svolgersi e attivare le loro richiamate. Il tempo viene gestito dall'applicazione e il conducente può richiedere di essere chiamato ad una determinata frequenza specifica.
I professionisti per l'elemento 1 includono un controllo più fine della tempistica a livello di comunicazione a scapito del controllo di cosa sta accadendo a livello di applicazione di livello superiore (che per un sistema in tempo reale può essere terribile).
I pro per l'articolo 2 includono un migliore controllo sui tempi dell'intero sistema per l'applicazione, a scapito di consentire a ciascun guidatore di gestire la propria attività.
Se qualcuno ha esperienza con questi scenari, mi piacerebbe sentire alcune idee sugli approcci utilizzati.