2009-11-17 16 views
7

Mi sono chiesto perché, a differenza di Scala, F # o Haskell, il framework .NET di base (disponibile in C# o VB) sembra avere pochissimo supporto nativo per modelli di concorrenza di livello superiore .Astrazioni di multithreading/concorrenza di alto livello per .NET

Ci sono meccanismi di base disponibili - serrature, monitor, il pool di thread - ma per quanto riguarda

  • variabili Sincronizzato (MVar)
  • canali sincroni
  • canali asincroni (vedere andare o Haskell)
  • Attori/messaggio che passa (Erlang-Style)
  • Futures
  • parallele calcoli/Lista funzioni
  • calcoli asincroni componibili attraverso Linq (come s 'async {} F #)

o anche software di memoria transazionale (STM for Haskell)

E anche tenuto conto di ParallelFX, questa lista è solo parzialmente coperto .

Ci sono alcune ragioni più profonde contro la fornitura di tali funzionalità (e invece di volere che le persone si scherzino con lo IAsyncResult) o si prevede di integrarlo in futuro?

+0

C'è una quantità enorme di sovrapposizione funzionale nella tua lista. Non penso che vorrei nemmeno tutto ciò in un ambiente. –

+0

Per prima cosa, a differenza delle lingue di esempio.NET framework è stato progettato pensando solo al paradigma object oriented, Scala è multi-paradigma, F # e Haskell sono funzionali – SpaceghostAli

+4

@SpaceghostAli - Come puoi dire che .NET è progettato solo per il paradigma object-oriented, seguito immediatamente dicendo che F # (un linguaggio che viene eseguito su di esso) è funzionale? Inoltre, stai dimenticando cose come Linq che è stato progettato esclusivamente per consentire la programmazione funzionale? –

risposta

6

C'è una ricerca attiva e in corso sulle migliori e più efficaci astrazioni che possono essere utilizzate per consentire il software concorrente senza padroneggiare le minuzie b/c la maggior parte degli sviluppatori non hanno il tempo o la voglia di sviluppare le proprie abilità a quel livello.

Dato questo, il BCL presenta una barriera piuttosto elevata all'ingresso per nuovi concetti, ma ciò non significa che non stiano accadendo. Più recentemente, in .Net 4, ci sarà l'introduzione dello Task Parallel Library. Versioni precedenti di TPL in realtà included a Future<T> type che sono state sostituite da newerabstractions.

C'è anche una ricerca attiva in corso nell'arena dei canali/ecc tramite il linguaggio di ricerca Axum.

Ovviamente non faccio parte del team e non lavoro per Microsoft, ma la mia comprensione è che c'è un desiderio di innovare in questo settore oltre a ciò che è già ampiamente disponibile.

+0

Il TPL è per il parallelismo, non per la concorrenza. –

+0

Questo è corretto. Axum è stata la ricerca sulla concorrenza, e i concetti vincenti sono ora (ovviamente) inseriti in .Net 4.5. –

2

Sono d'accordo con Greg D, c'è un sacco di "cose" in arrivo. MS con il nuovo framework .Net4 e il loro progetto Axum. Il problema che vedo con tutti questi approcci è che diventano estremamente complicati e che le competenze, le conoscenze e l'esperienza nei settori dell'informatica distribuita/parallela/distribuita sono piuttosto "limitate". Non scrivo questo per offendere nessuno, ma penso che le università e gli educatori in generale debbano prestare maggiore attenzione a questi argomenti. Ma, quello che penso e spero è che la consapevolezza generale che MS crea con l'implementazione di molte di queste idee, Axum, CCR & DSS, libreria di agenti asincroni ecc. E la tendenza generale/necessità verso il sistema multi-core/cloud, che noi vedrà più presto :)

+0

Ora che puoi vedere e toccare i bit di Axum che lo stanno trasformando nel mainstream, pensi ancora che siano estremamente complicati (presumibilmente più complicati del lavorare con i primitivi che li abilitano)? –

Problemi correlati