Penso che la tua azienda non dovrebbe utilizzare il multithreading.
Dopo aver fatto un progetto multithread su larga scala, ho scoperto che due tecniche erano fondamentali per far funzionare le cose. Innanzitutto , il codice doveva essere scritto correttamente. Ogni campo ha dovuto essere controllato manualmente per assicurarsi che fosse dichiarato correttamente e correttamente sincronizzato ovunque fosse referenziato. (Attenzione: sto semplificando un po 'le cose qui per mantenere la mia risposta breve - o comunque più breve.) In secondo luogo , il codice ha dovuto essere testato eseguendolo su macchine singole e multicore - molti minuti usando il 100% di ogni nucleo. (E se utilizza solo il 2% di ciascun core, come spesso accade per me, anche questo è un bug.)
Potresti riuscire a gestirlo, ma la tua organizzazione no. Anche se hanno capito il problema, cosa che non hanno, non hanno l'esperienza.
Molte lingue offrono modi per evitarlo. Se si dispone di un lettore socket, che di solito ha un proprio thread, fare in modo che ottenga le informazioni sul thread principale nel modo più rapido e semplice possibile. Meglio ancora, cerca le classi / funzioni di sistema che gestiranno la parte thread della lettura per te. Utilizzare una coda che esegue "eventi" uno dopo l'altro, come fanno la maggior parte delle API della GUI. (Usa la coda degli eventi dell'API della GUI stessa, per quella materia.) Se hai bisogno di un'elaborazione parallela, probabilmente troverai una sorta di "thread di lavoro" che ti permetterà di conservare i dati / i campi in un singolo thread, gestendo tutti i trasferimenti per te.
Sottolineare tutti i pericoli del multithreading. (Storie spaventose: il mio bug preferito riguardava un paio di righe come int i = 5; i = i * i;
:, che ha portato ad i
avere un valore di 35. Uno che ho visto molto è stato: if (thing != null) thing.reset();
lanciare un'eccezione puntatore null.) Penso che la tua unica speranza sia far capire loro che stanno entrare in un mondo intero, nuovo, strano, e che forse dovrebbero fare un grande passo indietro.
Io non sono sicuro di come vero multithreading dovrebbero essere gestiti. Se il lavoro può essere assegnato a una persona, e tutto ciò che fanno viene gettato via se fallisce, va bene. Ma una squadra sarà forte quanto il suo membro più debole, e anche un buon programmatore avrà problemi con il multithreading completo. Spero che le persone linguistiche troveranno un modo per renderlo sicuro. Ho visto alcuni software utili là fuori. Ma penso che sia meglio evitare il multithreading a meno che il tempo di esecuzione non sia critico e che sia disponibile un buon programmatore o un team collaudato .