I recently asked su programmi funzionali senza effetti collaterali, e ho imparato cosa significa questo per rendere banali i compiti parallelizzati. Nello specifico, le funzioni "pure" rendono questo banale in quanto non hanno effetti collaterali.Le espressioni lambda/delegate in C# "puro" o possono essere?
Ho anche recentemente esaminato le espressioni LINQ e lambda poiché ho analizzato più volte gli esempi qui su StackOverflow che includono l'enumerazione. Questo mi ha fatto chiedersi se parallelizzare un'enumerazione o un ciclo possa essere "più semplice" in C# ora.
Le espressioni lambda sono "pure" sufficienti per eseguire il parallelismo banale? Forse dipende da cosa stai facendo con l'espressione, ma possono essere abbastanza puri? Sarebbe qualcosa di simile sia teoricamente possibile/banale in C# ?:
- rompere il ciclo in pezzi
- eseguire un thread per ciclo attraverso ogni blocco
- Eseguire una funzione che fa qualcosa con il valore dalla corrente loop di posizione di ciascun thread
ad esempio, dire che ho avuto un sacco di oggetti in un ciclo di gioco (come sto sviluppando un gioco e pensavo alla possibilità di più thread) e aveva a che fare qualcosa con ogni di loro ogni fotogramma, sarebbe th e sopra essere banale da tirare fuori? Guardando IEnumerable sembra che tenga traccia della posizione corrente, quindi non sono sicuro di poter usare le normali collezioni generiche per rompere l'enumerazione in "blocchi".
Siamo spiacenti per questa domanda. Ho usato i proiettili sopra invece dello pseudo-codice perché non so nemmeno abbastanza per scrivere pseudo-codice dalla cima della mia testa. La mia conoscenza di .NET è stata puramente semplice business e sono nuovo per delegati e thread, ecc. Voglio principalmente sapere se l'approccio sopra è buono per perseguire, e se i delegati/lambda non devono preoccuparsi di quando arriva alla loro parallelizzazione.
AsParallel? Di cosa si tratta? C# 4? O è un download separato? – Bob
Sì, mi dispiace. PLINQ fa parte di .NET 4, esiste anche una versione (beta?) Per 3.5 –
+1 La programmazione funzionale conferisce più responsabilità al programmatore. Identificare i blocchi di codice che possono essere eseguiti in parallelo è uno di questi. – Perpetualcoder