27.3.08

Sequenzialità zoppa

Nell'universo percepibile non siamo in grado di invertire il tempo. Il prima e il dopo non si possono scambiare.
Forse.
In informatica esistono i task paralleli, laddove il sistema operativo lo permette. Che siano interi programmi o chiamate di funzione, che la cosa sia dichiarata esplicitamente dal programmatore o imposta dalla piattaforma di sviluppo, capita che un'operazione venga lanciata in un cosiddetto thread separato. Non ci interessa cosa ne fa il processore (o i processori, se sono più di uno), solo che i thread separati vengono eseguiti contemporaneamente. Se sono contemporanei, va da sé, non sono più sequenziali.

Vediamo un esempio: un'applicazione intranet produce una stampa, con il banale accorgimento di compilare una pagina html la quale sarà mandata in stampa e poi chiusa:
window.print();
self.close();

Le due istruzioni sono chiamate in un ordine preciso. Le intenzioni dello sviluppatore sono chiare: stampare (prima), chiudere (dopo). Se chiudi prima, col fischio che stampi dopo. E' logico, nesuno interpreterebbe diversamente. Ma cosa ne sa un computer.
Il metodo print() su Internet Explorer viene eseguito in un nuovo thread, così da lasciare il resto dello script libero di fare i suoi comodi mentre l'utente (colui che ha la pagina davanti) sceglie fra la laser, la getto, la aghi o il pdf. Risultato: la richiesta di chiudere la finestra arriva prima del dialogo di stampa.
La finestra termina sé stessa e tutti i thread che da essa dipendono... compresa quell'altra finestrella che nessuno ha ancora visto, che dovrebbe chiedere se ci piace di più la laser, la gel, la getto, l'A4 o il letter.
Ho dovuto litigare con lo sviluppatore che, anche dopo un comportamento comprovato e documentato con tanto di esperimenti fatti, ha continuato a sostenere che la sua pagina viene mandata in stampa regolarmente. Perché?

1 commento:

  1. tanto per riallacciarmi allo spezzare il pane...mistero della fede!
    Dan

    RispondiElimina