Dire che sto lavorando con un sistema che consente operazioni asincrone e non bloccanti. Se accodo un set di quelle operazioni e specifichi i loro riferimenti al buffer dei risultati:
nonblocking_write( message, write_buffer );
nonblocking_read( source, read_buffer );
nonblocking_read( other_source, other_read_buffer );
wait();
// do stuff with results now in the buffers
o accodare lo stesso insieme di operazioni, ma specificare i callback dei risultati per eseguire direttamente i risultati con
nonblocking_write( message, write_handler );
nonblocking_read( source, read_handler );
nonblocking_read( other_source, other_read_handler );
// doing stuff happens in the result handlers, not here
La mia domanda riguarda la libreria o l'ambiente esponendo le operazioni nonblocking_*()
. Quali strutture e modelli di software consentono questo tipo di cose per accadere?
Questi sono i miei pensieri finora:
-
In un ambiente con multithreading, genera un nuovo thread all'interno dell'operazione nonblock, quindi esegue un'operazione di blocco equivalente all'interno di quel thread.
-
In un singolo ambiente a thread, definire un costrutto
event
etasks
che gestiscono 'eventi', quindi eseguire operazioni non bloccanti, spingereevent
/task
coppie in una coda per un ciclo di eventi da eseguire dopo. (Penso che questo è come JavaScript lo fa.)