|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2095
|
[C#] Libreria IPC basata su Message Passing
Ciao a tutti!
Noi sviluppiamo applicazioni su Architettura Distribuita e quindi spesso usiamo processi quando in un'applicazione moderna si userebbero thread... il tutto è scritto in C ( ![]() Il mio sogno sarebbe di passare a C# e - con la scusa - usare qualcosa di più moderno... ma il fatto che esistono più processi per fare le cose mi interessa mantenerlo sia perché ho bisogno che l'applicazione possa essere divisa su più macchine sia perché è comodo magari per il collega sviluppare una parte e farsi la sua mini "applicazione" senza quello che sto sviluppando io e che magari ancora non funziona. Così questo sarebbe quello che mi piacerebbe avere:
Quindi una cosa del genere esiste già? O me la devo fare da solo?
__________________
Cosmos C# Open Source Managed Operating System Cosmos Thread Ufficiale Cosmos Official Site Vuoi collaborare allo sviluppo? Unisciti alla chat! Ultima modifica di fano : 12-03-2017 alle 20:18. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Che io sappia, i meccanismi IPC inclusi in .Net sono wrapper su funzioni esposte dall'OS (socket, named pipe, mmf).
WCF è una tecnologia (ormai obsoleta) per webservice SOAP, quindi è un meccanismo di comunicazione basato su socket. Ad oggi meglio Asp.Net MVC Core. Come funziona in COSMOS la comunicazione IPC? ![]() |
![]() |
![]() |
![]() |
#3 | ||
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2095
|
Quote:
![]() Le real time queue sono configurabili per numero massimo di messaggi e dimensione massima di ogni messaggio, inoltre puoi fare in modo che quando la coda è piena o si blocca chi scrive (fino a che chi legge scoda) o si iniziano a cacciare nel c*sso i messaggi! Abbiamo "risolto" mettendo numero enormi... in un'applicazione real time in ogni caso se il ricevente non scoda abbastanza velocemente sei nella brilla ![]() Il socket come ho detto sopra quando i processi si trovano sulla stessa macchina è meglio evitarli... L'unica "wrapper" che ho visto simile come concetto alle code real time è questo: https://msdn.microsoft.com/en-us/lib...vs.110%29.aspx però non se esiste nulla ad alto livello e soprattutto Mono le supporterà? Quote:
Per ora non abbiamo ancora il multi processing comunque su un SO come Cosmos in cui i processi saranno molto probabilmente "thread" sarà molto semplice fare IPC una volta trovato il "ricevente" potrai chiamare direttamente la sua "Recv()" dandogli l'ownership dell'oggetto "Message" ovvero senza dover serializzare nulla e senza copie ![]() P.S. MessageQueue impone serializzazione in XML quindi è da scartare...
__________________
Cosmos C# Open Source Managed Operating System Cosmos Thread Ufficiale Cosmos Official Site Vuoi collaborare allo sviluppo? Unisciti alla chat! Ultima modifica di fano : 13-03-2017 alle 17:49. |
||
![]() |
![]() |
![]() |
#4 | |||||
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Quote:
![]() Non vedo molte altre alternative: o Named Pipe o Memory Mapped File. Quote:
Quote:
Il fatto che si chiamino webservice non significa che siano applicabili solo all'ambito web ![]() Qt nella versione widget a volte sono un po' legnose, ma un disastro proprio? ![]() Quote:
![]() |
|||||
![]() |
![]() |
![]() |
#5 | ||||||||
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2095
|
Quote:
http://man7.org/linux/man-pages/man7/mq_overview.7.html Quote:
L'architettura attuale ha 3 difetti: 1. Usando Posix Message Queue funziona solo su Linux / Unix 2. E` scritta in C ( ![]() 3. Ha 2 processi "demoni" che servono di fatto solo per il caso (raro per altro) in cui l'applicazione sia distribuita su più macchine (solo in quel caso tra i "demoni" la comunicazione avviene su rete) Quote:
Quote:
Quote:
Comunque sì in molti casi riusciamo a fare tutta l'elaborazione in 10 ms, spesso è il SO (Linux) che "combatte" contro i nostri requisiti real time visto che a volte schedula processi che NON dovrebbe (togliere la CPU al processo Real Time per far girare la rotella sulla GUI non è proprio il massimo ![]() Quote:
![]() Quote:
![]() Poi è uno Widget Tool Kit incompleto per fare i bottoni con il bordo rotondo ce li siamo dovuti riscrivere completamente, mancano form (!), messagebox e persino i menu... boh! Purtroppo è una scelta aziendale obbligatoria quindi continuiamo a subire finché - spero - non si rendano conto che è una c*gata! Quote:
La "protezione" all'accesso di memoria avviene tutto con C# perché Cosmos è un Managed Operating System ![]() Come Singularity e Midori per l'appunto...
__________________
Cosmos C# Open Source Managed Operating System Cosmos Thread Ufficiale Cosmos Official Site Vuoi collaborare allo sviluppo? Unisciti alla chat! |
||||||||
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2095
|
Sto un po' giocando con MessagePack rispetto al C/C++ e le ridicole strutture (con il packing, l'endianess, ...) è proprio un altro mondo: creare oggetti e deserializzarli con 2 colpi di mouse non ha prezzo
![]() Ce ne sono 2 librerie MessagePack per C#: 1. https://github.com/neuecc/MessagePack-CSharp 2. https://github.com/msgpack/msgpack-cli la seconda è realizzata dall'ideatore originale del protocollo (lo stesso che ha fatto MessagePack per praticamente tutti gli altri linguaggi) ed è pure quella con più download, ma la sconsiglio ha ENORMI problemi di performance per serializzare un oggetto pure piuttosto semplice, mi è stato 1.250 secondi ![]() Non ha nemmeno supporto visto che non risponde alle issues, l'altra è quindi meglio: a serializzare lo stesso oggetto ci sta 30 millisecondi! Resta aperto il discorso che cosa uso per far comunicare sti processi?
__________________
Cosmos C# Open Source Managed Operating System Cosmos Thread Ufficiale Cosmos Official Site Vuoi collaborare allo sviluppo? Unisciti alla chat! Ultima modifica di fano : 24-03-2017 alle 13:58. |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 06:31.