Fondamentalmente, l'I / O serve per comunicare esternamente, cioè con altri processi (o con gli umani), sia che ciò avvenga tramite canali / pipe / socket o tramite file disco.
(In questo contesto io uso il processo verbale nel senso di processi come programmi in esecuzione su un sistema operativo. Mi rendo conto che il processo verbale, nel flowcharting, è usato per la nozione di qualsiasi computazione come usare una procedura o eseguire un incarico dichiarazione, quindi c'è possibilità di confusione, quindi userò il termine computation per questa nozione.)
Leggere / scrivere su un file è un metodo indiretto di comunicazione con un altro processo, spesso un processo / esecuzione futuri dello stesso programma, eppure ancora, potenzialmente su più altri programmi (alcuni non ancora in esecuzione).
Il calcolo, interno al processo, viene elaborato e non si qualifica come I / O. Le chiamate di funzione rappresentano l'elaborazione anziché l'I / O, anche se sono presenti valori restituiti.
Tuttavia, dobbiamo tracciare una linea da qualche parte come in molte lingue moderne, l'I / O è fatto tramite chiamate di funzione. Quindi, direi che se la chiamata è una scatola nera (perché è in una libreria che non possiedi / controlla), e conosciuta dalla lingua o dalle sue librerie standard per eseguire I / O, la descriverei come I / O. Se la chiamata è una casella bianca che può essere descritta dal proprio diagramma di flusso, contrassegnerei qui il suo utilizzo come elaborazione e descriverò l'I / O nel proprio diagramma di flusso. In caso contrario, descriverei le chiamate come elaborate.
Su questa base, la chiamata a get_random
viene visualizzata come elaborazione anziché su I / O che comunica con un processo esterno (passato, presente o futuro).