Man mano che i computer multiprocessore e multi-core diventano sempre più onnipresenti, si sta semplicemente sparando un nuovo thread un (relativamente) semplice e indolore modo di semplificare il codice? Ad esempio, in un progetto personale corrente, ho un server di rete in ascolto su una porta. Poiché questo è solo un progetto personale, è solo un'app desktop, con una GUI integrata per la configurazione. Quindi, l'applicazione si legge qualcosa di simile:Spara un thread una risposta valida per semplificare il codice?
Main() Read configuration Start listener thread Run GUI Listener Thread While the app is running Wait for a new connection Run a client thread for the new connection Client Thread Write synchronously Read synchronously ad inifinitum, or till they disconnect
Questo approccio significa che, mentre io devo preoccupare un sacco di blocco, con i potenziali problemi che comporta, io evitare un sacco di spaghetti code dalle chiamate assynchronous, ecc
Una versione leggermente più insidiosa di questo è venuto oggi quando stavo lavorando sul codice di avvio. L'avvio è stato rapido, ma utilizzava il caricamento lento per un sacco della configurazione, il che significava che mentre l'avvio era veloce, la connessione e l'utilizzo del servizio era difficile a causa del ritardo mentre caricava diverse sezioni (in realtà era misurabile in tempo reale tempo, fino a 3-10 secondi a volte). Così mi sono spostato su una strategia diversa, all'avvio, passando in rassegna tutto e costringendo il pigro carico a dare il via ... ma ciò ha fatto sì che iniziasse a rallentare in modo proibitivo; alzati, vai a prendere un caffè lentamente. Soluzione finale: gettare il ciclo in un filo separato con feedback nel vassoio di sistema mentre è ancora in fase di caricamento.
È questo atteggiamento "Meh, buttalo in un altro thread, andrà tutto bene" ok? A che punto inizi a ottenere rendimenti decrescenti e/o prestazioni ridotte?
Bella domanda e una buona aggiunta alla knowledge base SO. – Alan
Sono d'accordo, davvero una bella domanda. –