Quali false idee ci sono che mettono le persone fuori uso dei thread? [chiuso]

12

L'implementazione del threading in un programma è difficile, sì, tuttavia, perché alcune persone non le implementeranno anche quando c'è un'ovvia necessità per questo.

Un esempio: il programma deve caricare un set di dati da un database, la cosa da fare sarebbe fare la connessione e ottenere i dati dal database in un thread di lavoro e caricarlo nella GUI, lasciando il thread della GUI reattivo per l'utente.

Ma no, ho parlato con persone che sembrano pensare che i thread siano malvagi e cattivi e che cosa no e uno dovrebbe evitarli a tutti i costi. Ho persino sentito che alcuni istruttori di classe sconsigliavano l'uso di thread e quindi non volevano coprire il loro uso. COSA ???

Con l'hardware che entra nel multi-core, penso che dobbiamo capire meglio i thread e non aver paura di usarli. Lo trovo un soggetto affascinante personalmente.

Quindi quali sono le cose che hai sentito sul threading che sono false?

    
posta Tony The Lion 21.12.2010 - 23:23
fonte

7 risposte

19

Il threading è difficile

Certo. Può essere. Tuttavia, le persone hanno questa idea in testa che è così difficile, tale che non si preoccupano di provare per capirlo.

Non è come è impossibile.

    
risposta data 21.12.2010 - 23:38
fonte
9

Non è la parte di threading difficile ma la necessità di sincronizzazione e tutto ciò che viene fornito con i thread. Nell'esempio della GUI come si dice al thread principale che il set di dati è pronto per l'accesso? Passi un sacco di richiami? Disponi un intero gruppo di variabili di controllo in tutto il codice? In alcuni modelli di GUI, ad es. Silverlight, c'è qualcosa chiamata affinità di thread che significa che non si accede agli elementi della GUI che si trovano sul thread principale da altri thread, quindi è necessario fare in modo che il thread principale sappia che certe informazioni sono pronte per essere elaborate ulteriormente.

Non ho mai sentito nulla di falso sui thread. Ho appena letto un sacco di casi studio sulla sincronizzazione come una cagna quando qualunque algoritmo si sta utilizzando non è intrinsecamente parallelo.

    
risposta data 22.12.2010 - 00:04
fonte
3

Il threading risolve tutti i tuoi problemi

Se riscontri problemi di prestazioni, devi non passare direttamente al threading.

I thread sono leggeri

I thread sono leggeri in decine e venti. Generare migliaia di thread non è.

Il threading è facile [Java]

È facile creare thread, questo non significa che ne trarrai beneficio.

    
risposta data 21.12.2010 - 23:34
fonte
1

Alla fine perderai ogni guadagno derivante dal threading perché fissare bug pazzi che potrebbero derivare dall'uso di alcune librerie / funzioni che non sono thread-safe (di cui non eri a conoscenza) richiederà una sincronizzazione eccessiva.

Hai una probabilità molto più alta di incontrare bug che non sarai in grado di risolvere se usi i thread e quando non lo fai.

    
risposta data 22.12.2010 - 05:33
fonte
1

Riassumendo in modo saggio perché i thread sono difficili da usare: -
Cose vere 1) Servono la sincronizzazione e decisioni di progettazione accurate su cosa bloccare e quando bloccare 2) Nessun controllo sul flusso del tempo di corsa
3) Debugging difficile
4) Compatibilità con la piattaforma (pochissime volte): - Esistono librerie per occuparsene

Cose false: -
1) Concetti confusionari delle funzioni thread-safe e re-entrant
2) I thread sembrano buoni sulla carta ma sono molto difficili da implementare

    
risposta data 22.12.2010 - 06:51
fonte
1

Se non vuoi scrivere test per il tuo codice, non usare thread.

I thread non sono per il tipico programmatore "copia e incolla" che non capisce i fondamenti di base del sistema operativo e dell'architettura del computer. Dal momento che il 90% dei programmatori conosce solo Java, queste non sono le persone che dovrebbero usare i thread. Java rende i thread "facili" ma ho visto molti programmatori che pensano che se usano strutture sincronizzate il loro codice funzionerà nei thread .... uhm no.

Detto questo, tutti devono iniziare da qualche parte, ma non fare il tuo primo progetto di threading aggiornando il tuo server di backend di produzione aziendale.

    
risposta data 22.12.2010 - 04:30
fonte
1

An example: Program has to load a dataset from a database, the thing to do would be to make the connection and get the data from the database in a worker thread and then load it into the GUI, leaving the GUI thread responsive for the user.

Non vedo che questa situazione rappresenti una necessità di utilizzare il threading per almeno 4 ragioni:

  1. Il recupero dei dati dovrebbe essere molto veloce.

  2. In molte applicazioni Line of Business, l'utente non ha nulla a che fare con l'applicazione nel primo o secondo che sta aspettando il risultato. Inoltre, l'utente dovrà attendere che i dati tornino in qualsiasi modo per completare l'attività desiderata. D'altro canto, la query potrebbe essere codificata in modo intelligente in modo che recuperi solo una pagina piena di informazioni alla volta e altre tecniche di ottimizzazione potrebbero aiutare il tempo di risposta.

  3. Nelle interfacce basate sul Web, i collegamenti possono essere resi attivi per quanto riguarda il modello di threading.

  4. Il threading aggiunge complessità mentre ammetti, alcuni sviluppatori lungo la linea potrebbero non essere in grado di aggiungere funzionalità o eseguire il debug del codice complesso.

La mia opinione è: utilizzare il threading quando è necessario perché la manutenzione e l'affidabilità del software sono più preziose per un'organizzazione rispetto all'eleganza del codice.

    
risposta data 03.02.2012 - 22:25
fonte

Leggi altre domande sui tag