Mostrando las entradas con la etiqueta Paralelo. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Paralelo. Mostrar todas las entradas

jueves, 25 de enero de 2018

El Manual del Día: Programación Asíncrona y Paralela en .NET 4.5

MSDN - Manual de Programación Asíncrona y Paralela en .NET 4.5

Titulo: Manual de Programación Asíncrona y Paralela en .NET 4.5
Fuente Original: Microsoft Developer Network (MSDN)
Compilado Por: Luis Dueñas Huaroto (Lduenas)
Año de Compilación: 2010
Número de Páginas: 336

Indice del Manual de Programación Asíncrona y Paralela en .NET 4.5

1. Subprocesamiento administrado
  1.1. Principios básicos del subprocesamiento administrado
    1.1.1. Subprocesos y subprocesamiento
    1.1.2. Excepciones en subprocesos administrados
    1.1.3. Sincronizar datos para subprocesamiento múltiple
    1.1.4. Estados de subprocesos administrados
    1.1.5. Subprocesos de primer y segundo plano
    1.1.6. Subprocesamiento administrado y no administrado en Windows
    1.1.7. Thread.Suspend, recolección de elementos no utilizados y puntos de seguridad
    1.1.8. Almacenamiento local de subprocesos: Campos estáticos relacionados con
              subprocesos y ranuras de datos
    1.1.9. Cancelación en subprocesos administrados
      1.1.9.1. Cómo: Realizar escuchas de solicitudes mediante sondeo
      1.1.9.2. Cómo: Registrar devoluciones de llamadas de solicitudes de cancelación
      1.1.9.3. Cómo: Realizar escuchas de solicitudes de cancelación cuando tienen
                   controladores de espera
      1.1.9.4. Cómo: Realizar escuchas de varias solicitudes de cancelación
  1.2. Utilizar subprocesos y subprocesamiento
    1.2.1. Crear subprocesos y analizar los datos en el inicio
    1.2.2. Pausar y reanudar subprocesos
    1.2.3. Destruir subprocesos
    1.2.4. Planear subprocesos
    1.2.5. Cancelar subprocesos de manera cooperativa
  1.3. Procedimientos recomendados para el subprocesamiento administrado
  1.4. Objetos y características de subprocesos
    1.4.1. Grupo de subprocesos administrados
    1.4.2. Temporizadores
    1.4.3. Monitores
    1.4.4. Controladores de espera
    1.4.5. Controladores de espera
      1.4.5.1. EventWaitHandle
      1.4.5.2. AutoResetEvent
      1.4.5.3. ManualResetEvent y ManualResetEventSlim
      1.4.5.4. CountdownEvent
    1.4.6. Exclusiones mutuas (mutex)
    1.4.7. Operaciones de bloqueo
    1.4.8. Bloqueos de lector y escritor
    1.4.9. Semaphore y SemaphoreSlim
    1.4.10. Información general sobre los primitivos de sincronización
    1.4.11. Barrier
      1.4.11.1. Cómo: Sincronizar operaciones simultáneas con una clase Barrier
    1.4.12. SpinLock
      1.4.12.1. Cómo: Utilizar SpinLock para la sincronización de bajo nivel
      1.4.12.2. Cómo: Habilitar el modo de seguimiento de subproceso en el bloqueo SpinLock
    1.4.13. Tokens de cancelación
    1.4.14. SpinWait
      1.4.14.1. Cómo: Usar SpinWait para implementar una operación de espera de dos fases
2. Modelos para la programación asincrónica
  2.1. Modelo asincrónico basado en tareas (TAP)
    2.1.1. Implementar el modelo asincrónico basado en tareas
    2.1.2. Utilizar el modelo asincrónico basado en tareas
    2.1.3. Interoperabilidad con los modelos asincrónicos y otros tipos
  2.2. Publicar datos de símbolos
    2.2.1. Programación multiproceso con el modelo asincrónico basado en eventos
      2.2.1.1. Información general sobre el modelo asincrónico basado en eventos
      2.2.1.2. Implementar el modelo asincrónico basado en eventos
      2.2.1.3. Procedimientos recomendados para implementar el modelo asincrónico
                   basado en eventos
      2.2.1.4. Decidir cuándo implementar el modelo asincrónico basado en eventos
      2.2.1.5. Tutorial: Implementar un componente que admita el modelo asincrónico
                   basado en eventos
        2.2.1.5.1. Cómo: Implementar un componente que admita el modelo asincrónico
                        basado en eventos
        2.2.1.5.2. Cómo: Implementar un cliente en un modelo asincrónico basado en eventos
      2.2.1.6. Cómo: Utilizar componentes que admitan el modelo asincrónico basado en eventos
  2.3. Modelo de programación asincrónica (APM)
    2.3.1. Llamar a métodos asincrónicos mediante IAsyncResult
      2.3.1.1. Bloquear la ejecución de una aplicación mediante AsyncWaitHandle
      2.3.1.2. Bloquear la ejecución de una aplicación al finalizar una operación asincrónica
      2.3.1.3. Sondear el estado de una operación asincrónica
      2.3.1.4. Utilizar un delegado AsyncCallback para finalizar una operación asincrónica
        2.3.1.4.1. Utilizar un delegado AsyncCallback y un objeto State
    2.3.2. Programación asincrónica mediante delegados
      2.3.2.1. Llamar a métodos sincrónicos de forma asincrónica
      2.3.2.2. Ejemplo de programación de delegados asincrónicos
3. Programación paralela en .NET Framework
  3.1. Biblioteca de procesamiento paralelo basado en tareas (TPL)
    3.1.1. Paralelismo de datos (Task Parallel Library)
      3.1.1.1. Cómo: Escribir un bucle Parallel.For simple
      3.1.1.2. Cómo: Escribir un bucle Parallel.ForEach simple
      3.1.1.3. Cómo: Detener o interrumpir un bucle Parallel.For
      3.1.1.4. Cómo: Escribir un bucle Parallel.For que tenga variables locales de subproceso
      3.1.1.5. Cómo: Escribir un bucle Parallel.ForEach que tenga variables locales de subproceso
      3.1.1.6. Cómo: Cancelar un bucle Parallel.For o ForEach
      3.1.1.7. Cómo: Controlar excepciones en bucles paralelos
      3.1.1.8. Cómo: Acelerar cuerpos de bucle pequeños
      3.1.1.9. Cómo: Recorrer en iteración directorios con la clase paralela
    3.1.2. Paralelismo de tareas (Task Parallel Library)
      3.1.2.1. Tareas de continuación
      3.1.2.2. Tareas anidadas y tareas secundarias
      3.1.2.3. Cancelación de tareas
      3.1.2.4. Control de excepciones
      3.1.2.5. Cómo: Usar Parallel.Invoke para ejecutar operaciones paralelas
      3.1.2.6. Cómo: Devolver un valor de una tarea
      3.1.2.7. Cómo: Esperar a que una o varias tareas se completen
      3.1.2.8. Cómo: Cancelar una tarea y sus elementos secundarios
      3.1.2.9. Cómo: Controlar excepciones iniciadas por tareas
      3.1.2.10. Cómo: Encadenar varias tareas con continuaciones
      3.1.2.11. Cómo: Crear tareas precalculadas
      3.1.2.12. Cómo: Recorrer un árbol binario con tareas paralelas
      3.1.2.13. Cómo: Desencapsular una tarea anidada
      3.1.2.14. Cómo: Evitar que una tarea secundaria se adjunte a su elemento primario
    3.1.3. Biblioteca de procesamiento paralelo basado en tareas (TPL)
      3.1.3.1. Cómo: Escribir y leer mensajes en un bloque de flujo de datos
      3.1.3.2. Cómo: Implementar un modelo de flujo de datos productor-consumidor
      3.1.3.3. Cómo: Realizar una acción cuando un bloque de flujos de datos recibe datos
      3.1.3.4. Tutorial: Crear una canalización de flujos de datos
      3.1.3.5. Cómo: Desvincular bloques de flujos de datos
      3.1.3.6. Tutorial: Usar flujos de datos en aplicaciones de Windows Forms
      3.1.3.7. Cómo: Cancelar un bloque de flujos de datos
      3.1.3.8. Tutorial: Crear tipos de bloques de flujos de datos personalizados
      3.1.3.9. Cómo: Usar JoinBlock para leer datos de diferentes orígenes
      3.1.3.10. Cómo: Especificar el grado de paralelismo en un bloque de flujos de datos
      3.1.3.11. Cómo: Especificar un programador de tareas en un bloque de flujos de datos
      3.1.3.12. Tutorial: Usar BatchBlock y BatchedJoinBlock para mejorar la eficacia
    3.1.4. TPL con otros modelos asincrónicos
      3.1.4.1. TPL y la programación asincrónica tradicional de .NET
      3.1.4.2. Cómo: Encapsular modelos de EAP en una tarea
      3.1.4.3. Problemas potenciales en el paralelismo de datos y tareas
  3.2. Parallel LINQ (PLINQ)
    3.2.1. Introducción a PLINQ
    3.2.2. Introducción a la velocidad en PLINQ
    3.2.3. Conservar el orden en PLINQ
    3.2.4. Opciones de combinación en PLINQ
    3.2.5. Posibles problemas con PLINQ
    3.2.6. Cómo: Crear y ejecutar una consulta PLINQ simple
    3.2.7. Cómo: Controlar la ordenación en una consulta PLINQ
    3.2.8. Cómo: Combinar consultas LINQ paralelas y secuenciales
    3.2.9. Cómo: Controlar excepciones en una consulta PLINQ
    3.2.10. Cómo: Cancelar una consulta PLINQ
    3.2.11. Cómo: Escribir una función de agregado personalizada de PLINQ
    3.2.12. Cómo: Especificar el modo de ejecución en PLINQ
    3.2.13. Cómo: Especificar opciones de combinación en PLINQ
    3.2.14. Cómo: Recorrer en iteración directorios con PLINQ
    3.2.15. Cómo: Medir el rendimiento de consultas PLINQ
    3.2.16. Ejemplo de datos de PLINQ
  3.3. Estructuras de datos para la programación paralela
  3.4. Herramientas de diagnóstico paralelo
  3.5. Particionadores personalizados para PLINQ y TPL
    3.5.1. Cómo: Implementar las particiones dinámicas
    3.5.2. Cómo: Implementar un particionador con un número estático de particiones
  3.6. Generadores de tareas
  3.7. Programadores de tareas
    3.7.1. Cómo: Crear un programador de tareas que limita el grado de simultaneidad
    3.7.2. Cómo: Programar trabajo en el subproceso de la interfaz de usuario
  3.8. Expresiones lambda en PLINQ y TPL

Descarga

martes, 7 de julio de 2015

Entrenamiento - Inicio del .NET Developer

Inicio del .NET Developer (The Best Practices for Performance)

Quiero anunciar el inicio del programa .NET Developer el cual tendra un solo horario, los Sabados en las Tardes de 3:00 pm a 9:00 pm. y la fecha de inicio es el 01 de Agosto. Los que eligieron el horario del Domingo este se ha cancelado por no llegar al mínimo necesario para iniciar y los que desean pueden pasarse al horario de los Sabados en la Tarde, previa confirmación por mail.

Modulo 1: Windows Developer (72 horas en 3 meses)
Fundamentals
Curso 01: .NET Framework (18 horas)
Curso 02: ADO .NET (18 horas)
Windows Applications
Curso 03: WinForms  (18 horas)
Curso 04: WPF  (18 horas)

Modulo 2: Web Developer (72 horas en 3 meses)
Back End
Curso 05: ASP.NET MVC (18 horas)
Curso 06: Servicios (WCF y Web API) (18 horas)
Front End
Curso 07: JavaScript (DOM, jQuery, AJAX) (18 horas)
Curso 08: HTML5 (APIs) (18 horas)

Modulo 3: Mobile Developer (72 horas en 3 meses)
Web Mobile
Curso 09: Responsive Web Designe (CSS3+HTML5+MVC) (18 horas)
Curso 10: jQuery Mobile (18 horas)
Native Apps
Curso 11: Xamarin Forms iOS (18 horas)
Curso 12: Xamarin Forms Android (18 horas)

Estándares y Malas Prácticas de Desarrollo Web

La mayoria de desarrolladores confunde el Estándar con las Buenas Prácticas, a continuación una lista de temas que considero Estándares y Malas Prácticas de Desarrollo:
- Entity Framework
- LINQ
- DataSets y DataTables
- Abuso de Librerías de JavaScript (jQuery, jQueryUI, Kendo, etc)
- Abuso de Frameworks de Responsive Web Design (Bootstrap, jQuery Mobile, etc)
- Abuso de Controles de Terceros (Infragistics, Telerik, DevExpress, etc)
- Reporteadores de Datos (Crystal Reports, ReportViewer)
- Formatos de Datos: XML, JSON
- Todo Orientado a Servicios: Servicios Web XML, WCF, Web API, etc.
- Trabajar en forma Síncrona, No Concurrente y con un Solo Procesador.

Muchos se preguntaran que tienen de malo, el usar esas características, la respuesta es que afectan considerablemente la performance. Yo en clases demuestro la diferencia en Tiempo de Procesamiento y Memoria (Performance) para que no quede ninguna duda, pero lamentablemente solo mis alumnos pueden ver dichas comparaciones.

Buenas Prácticas de Desarrollo Web (Performance)

Es lo que proponemos para desarrollar en .NET o en cualquier plataforma, usar lo nativo, lo que ya viene de base, por ejemplo en .NET, el reemplazo del estándar sería:
- ADO .NET
- Predicados
- Listas de Objetos
- JavaScript y APIs de HTML5 (ejemplo asíncrono con XmlHttpRequest en vez de jQuery)
- Crear tu propio archivo CSS Responsivo.
- Crear tus propios Controles que devuelvan la menor cantidad de HTML
- Crear tu propio Reporte con JavaScript, HTML, Drawing, Canvas, etc
- Formato de Datos Personalizado (Strings)
- Exponer como Servicios solo lo necesario (para otras plataformas), mejor es usar Librerías (No hay serialización si esta local o si es remota interna lo aconsejable es Binario con TCP), etc.
- Trabajar en forma Asíncrona, Concurrente y Paralela (todos los Procesadores).

Todos nos preguntamos porque las paginas web que desarrollamos son tan lentas y buscamos la solución en Hardware (mas memoria, mas procesador, mas Disco, mas Servidores, etc) cuando el Problema de la Performance es básicamente Software, es decir, nuestro código.

Comentario Final

Si tu experiencia como desarrollador es usar los estándares descritos anteriormente, entonces, te conviene capacitarse en el Programa .NET Developer que inicio en Agosto, ya que es el único en nuestro país que tiene un enfoque fuera del tradicional, yo enseño a que aprendas a Crear tu mismo todo y  no a usar cosas que estan mal creadas.

Los que ya llevaron alguna vez conmigo, sobre todo hace mas de un año; los contenidos, el enfoque y los demos son totalmente distintos.

Finalmente, recalcar que por ahora habrá un solo grupo que será los Sabados en la Tarde y la Inversión menual es de 360 soles, lo que es muy económico respecto a lo que van a aprender. Actualmente, muchos pagan mucho mas para que les enseñen cosas que no sirven para nada, es por eso que la mayoría de sitios web dan pena (sino me creen pasenle el Test de YSlow y PageSpeed).

Solo quedan 5 vacantes para iniciar, los interesados pueden confirmar su inscripción por mail a Luis.duenash@gmail.com. En cuanto al pago se hará el mismo día y en cuanto al local les enviaré por mail (solo a los registrados).

Los que este año hubieran llevado conmigo, pueden dar sus comentarios para animar a los que todavía dudan que tan bueno es el curso y quieran compararlo con otros cursos de .NET.