¿Las expresiones lambda tienen múltiples subprocesos?¿Las expresiones lambda tienen múltiples subprocesos?
Digamos que cuando se escribe una fórmula matemática como un método lambda, cuando se pasa a otro método, ¿sería multihebra?
¿Las expresiones lambda tienen múltiples subprocesos?¿Las expresiones lambda tienen múltiples subprocesos?
Digamos que cuando se escribe una fórmula matemática como un método lambda, cuando se pasa a otro método, ¿sería multihebra?
No es 100% claro en lo que estás preguntando.
¿Estás preguntando si las lambdas se ejecutan naturalmente en un hilo diferente?
Si es así, son solo otra instancia de System.Delegate y se ejecutan en el hilo principal a menos que se solicite específicamente lo contrario.
¿Estás preguntando si es seguro ejecutarlos en varios subprocesos?
Esta es una pregunta que solo puede responderse conociendo el contenido de la expresión lambda. No son intrínsecamente seguros para hilos. En mi experiencia, es mucho menos probable que sean seguras para subprocesos de lo que cabría esperar.
No, se ejecutan en el hilo en el que se crean a menos que lo pase a otro hilo, como cualquier otro método. No querrás que se ejecuten en un hilo diferente automáticamente, créeme.
pedante: es el hilo en el que se ejecuta el delegado (por ejemplo, crear en un hilo, pasar como referencia a otro y el delegado es ejecutado allí). – Richard
Bueno, una lambda es solo un método anónimo, se ejecuta en cualquier hilo al que se llame, a menos que proporciones código para ejecutar en un hilo separado.
En la próxima versión de C#, están agregando opciones de subprocesamiento múltiple a LINQ (llamado PLINQ) y delega. Echa un vistazo a más información here. Actualmente, todo está en un solo hilo.
Bueno, está en los hilos * que * elija usar ... no necesariamente solo el que. –
También estoy bastante seguro de que va a ser puramente una biblioteca, no una cosa específica de C#. –
sí, probablemente debería decir la próxima versión de .net. disculpas. – Shawn
Como han dicho otros, las expresiones lambda no son intrínsecamente de subprocesos múltiples, ni los métodos estándar de extensión de linq a objetos hacen nada especial para llamarlos en subprocesos separados.
Sin embargo, si desea hacer una programación de subprocesos múltiples similar a linq, debe consultar Parallel Extensions to .NET Framework. También consulte este enlace:
http://blogs.msdn.com/pfxteam/
Lamentablemente, esto no será RTM hasta que VS2010/.Net4.0 esté fuera.
Las expresiones Lambda son solo métodos como cualquier otro. ¿Qué hace que un método multiproceso?
Monitor
clase, bloqueo de lectura/escritura, Interlocked
acceso, WaitHandle
, etc.), minimiza las disputas de bloqueo.El compilador C# es lo suficientemente inteligente como para saber si se generan métodos estáticos o de instancia para sus lambdas.
Gracias. Cuando dijiste "¿Qué hace que un método tenga múltiples subprocesos?", ¿Quisiste decir que estas directrices lo hacen seguro o multihilo cuando se ejecuta? –
Quiero decir multiproceso es seguro para subprocesos. Si se llama a un método (o lambda) desde diferentes subprocesos, se ejecuta en cada subproceso por separado, es decir, cada subproceso tiene su propia pila de llamadas. –
Respuesta potencialmente confusa (pero verdadera).En algunos escenarios comúnmente encontrados, una lambda puede ejecutarse en otra máquina, en un tipo completamente diferente de entorno de tiempo de ejecución y, por lo tanto, en otra secuencia, y la persona que llama no tiene por qué esperar a que la ejecución remota se complete por completo antes de continuar.
(En concreto, si se le pasa a una consulta LINQ to SQL.)
Buen punto, incluso si no es la ejecución más directa y no local – Pierreten
Gracias. Estaba preguntando # 1. –
s/hilo principal/hilo actual/como su donde se ejecuta el delegado. – Richard