Bill :Αυτό που αναφέρεις ότι είναι συντηριτικός ο αλγόριθμος σε PLINQ μπορούμε να το αλλάξουμε όπως είδα με το WithExecutionMode.(ParallelExecutionMode.ForceParallelism) στο PLINQ ερώτημα και να το εκτελέσουμε με ότι κόστος συνεπάγετε αυτό παράλληλα (βέβαια αυτό μπορεί να είναι και κακή τεχνική αν ο φόρτος εργασίας του μηχανήματος είναι μεγάλος) .
Δεν είναι θέμα φόρτου. Αν το overhead της παράλληλης επεξεργασίας είναι μεγαλύτερο από το όφελος, το ForceParallelism θα προκαλέσει καθυστέρηση, όχι επιτάχυνση. Από την άλλη, υπάρχουν απλά περιπτώσεις που το .NET 4 θα κάνει λαθος. Αν π.χ. εκτελείς μία μακρόχρονη ασύγχρονη διαδικασία μέσα στο PLINQ query, μπορείς να σηκώσεις πολύ περισσότερα ταυτόχρονα tasks απ' ότι αν εκτελείς CPU heavy αλγόριθμους. Το PLINQ δεν το ξέρει όμως και έτσι επιλέγει συντηρητικά.
Για να πεις στο PLINQ πόσα ταυτόχρονα tasks να σηκώσει χρησιμοποιείς την
WithDegreeOfParallelism για να δώσεις μέχρι 64 ταυτόχρονα tasks. Λογικό το νούμερο αν μιλάμε για CPU bound (ποιός έχει μηχάνημα με 64 cores?) μικρό αν μιλάμε για ασύγχρονη επεξεργασία, όπως π.χ. crawling
Επιπλέον, υπάρχουν operations που το .NET 4 θα εκτελέσει πάντα σύγχρονα ενώ το 4.5 θα εκτελέσει παράλληλα. Το
PLINQ Queries that run in parallel in .NET 4.5 του Stephen Toub έχει ένα πίνακα με τις εντολές που εκτελούνται πλέον παράλληλα.
Τέλος, το πρόβλημα με τα παραδείγματα που ψάχνεις είναι ότι ζητάς κάτι πολύ συγκεκριμένο - ΚΑΙ MapReduce ΚΑΙ TPL ΚΑΙ ένα μόνο μηχάνημα. Τα περισσότερα παραδείγματα ασχολούνται με ένα αντικείμενο τη φορά.
Ειδικά για το word count μπορείς να δεις
αυτό το walkthrough για το DataFlow, όπου σπάει το πρόβλημα σε βήματα ξεκινώντας από το split του αρχικού κειμένου. Το παράδειγμα που κοίταζες στην αρχή θεωρεί ότι το αρχείο έχει ήδη γίνει split σε λέξεις, κάτι το οποίο κοστίζει αρκετά και μπορεί να γίνει επίσης ασύγχρονα.
Μπορεί να μην είναι το καλύτερο παράδειγμα για map reduce, αλλά δίνει μία καλή εικόνα μίας πιο γενικής αντιμετώπισης (pipeline από agents, όχι μόνο mappers, reducers).
Για να δούμε μήπως βρούμε κανα καλύτερο παράδειγμα (ή το χρόνο να γράψουμε κανένα)
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos