Modalità di gestione delle chiamate di ricezione asincrone

1

Sto implementando un sistema di trasmissione dei messaggi primitivo. Attualmente sto progettando una funzione di ricezione per le chiamate asincrone. Posso implementare una funzione di ricezione asincrona senza utilizzare le funzioni di callback?

    
posta Nicole 26.02.2011 - 20:42
fonte

5 risposte

2

I messaggi ricevuti possono essere messi in coda.

Inoltre, è possibile utilizzare un segnale per indicare all'applicazione quando la coda ha ricevuto un nuovo messaggio.

    
risposta data 26.02.2011 - 21:19
fonte
0

Non penso che tu possa, almeno non facilmente. Il problema è che mentre si sta aspettando il messaggio è necessario avere un thread che non stia bloccando e che richieda una richiamata.

Se vuoi fare un'enorme quantità di hackeraggio linguistico potresti essere in grado di rendere invisibile la callback asincrona al programmatore, ma non penso che tu possa farlo in qualcosa che non sia blando. (O almeno non vorrei provare!)

    
risposta data 26.02.2011 - 20:54
fonte
0

Dipende dalla lingua con cui vuoi farlo e dallo stack di comunicazione che intendi utilizzare.

Tutto ciò che gestisce le prese dovrebbe essere in grado di farlo.

In C almeno questo è esattamente il modo in cui si suppone di scrivere un server socket: in un ciclo che controlla o attende i messaggi, non con i callback - se il server ha altre attività da fare, basta che lo maneggi un altro thread.

Avrei bisogno di sapere un po 'di più sulla tua area problematica prima di poter dare un aiuto significativo.

    
risposta data 26.02.2011 - 21:44
fonte
0

È possibile sostituire i callback con un puntatore a una coda di messaggi. Questo non è così portatile se non si dispone di un wrapper attorno alle strutture della coda dei messaggi per nascondere le dipendenze del sistema operativo.

    
risposta data 26.02.2011 - 23:42
fonte
0

Esiste una libreria Scala per la programmazione reattiva che usa il supporto di Scala per le continuazioni delimitate per consentire al client API di scrivere codice come se fosse sincrono. Sfortunatamente ho dimenticato il nome della libreria.

C # 5 / VB.NET 11 fa la stessa cosa ma usa una trasformazione CPS nel compilatore (simile alla trasformazione della macchina di stato che già fanno per i generatori, infatti, i due sono così simili, che il team VB.NET in realtà ha deciso di introdurre i generatori anche in VB.NET 11, poiché sono comunque in grado di riutilizzare il design su entrambe le funzionalità).

StratifiedJS fa la stessa cosa per ECMAScript.

Rx è una libreria per .NET, ECMAScript e presto Objective-C / Cocoa sviluppata da Microsoft, che utilizza un interfaccia combinatore monadico per gestire eventi asincroni.

Anche la programmazione reattiva funzionale è molto popolare.

A causa della crescita del calcolo distribuito, questa è attualmente un'area di ricerca molto attiva. Continuazioni, Monade, FRP, Oggetti, attori, ... nome qualsiasi strumento di strutturazione del programma a cui puoi pensare e scommetto che c'è qualcuno che sta lavorando per applicarlo alla programmazione asincrona.

    
risposta data 27.02.2011 - 01:04
fonte

Leggi altre domande sui tag