thread example ejemplo multithreading delphi delphi-xe

multithreading - example - ¿Qué hay de nuevo en multihilo en Delphi XE?



delphi thread synchronize (6)

Además, además de lo que ya se ha mencionado:

Hace algún tiempo vi que la gente discutía sobre el nuevo multihilo en Delphi XE y sobre el hecho de que Delphi tiene algunos problemas "nativos" debido a la forma en que implementa el multihilo. Y recomendaban algunas bibliotecas externas para reemplazar el multihilo Delphi predeterminado.

¿Puede indicarme alguna documentación y la biblioteca de subprocesos más popular para Delphi XE? Gracias


Creo que los problemas "nativos" de los que está hablando no están relacionados con la forma en que se implementa TThread , sino con otros aspectos de la RTL:

  • El administrador de memoria es muy rápido y está bien escrito, pero no escala de forma lineal cuando se ejecuta con varios subprocesos concurrentes en múltiples núcleos;
  • Los tipos contados de referencia (como string y matrices dinámicas ) se implementan con un código de operación de lock asm para contar de forma atómica (Interbloqueado / Enclavado en x64), que también puede escalarse mal en aplicaciones de subprocesos múltiples (es decir, todos los núcleos se congelan cuando esto se ejecuta el código de operación: incluso si las CPU más recientes lograron avances al respecto, una implementación de RCU puede escalarse mejor).

Esas debilidades son comunes a todas las bibliotecas de múltiples hilos, incluso OmniThreadLibrary sufrirá por this . Existen desde las primeras versiones de Delphi, y todavía están allí con Delphi XE2. La implementación de 64 bits es similar (incluso más lenta), y la plataforma Mac OS comparte la misma implementación.

Consulte esta otra pregunta sobre SO sobre cómo escribir aplicaciones de subprocesos múltiples en Delphi.

Para ser honesto, los dos puntos anteriores aparecerán solo en algunos tipos de aplicaciones muy específicas.

Por lo tanto, no hay nada de qué preocuparse por el multi-threading en Delphi, si conoce esos puntos, y no abuse de las llamadas del administrador de memoria o del proceso de cadenas en sus hilos.


Creo que ya se han cubierto todas las características nuevas.

Para la parte de documentación, aquí hay una copia archivada en el clásico libro tutorial Martin Harvey. Multithreading - The Delphi Way. Después de leer, probablemente se dará cuenta de que no hay necesidad real de bibliotecas contribuidas (excepto, tal vez, el grupo de subprocesos), recuerde, los marcos no simplifican las cosas para usted, sino que también lo privan del control de grano fino.


Gabr probablemente mencionó nuevas incorporaciones principales. Lo que probablemente quedó son las nuevas sobrecargas para TThread.Synchronize y TThread.Queue que ahora pueden ejecutar métodos anónimos.


TThreadedQueue se introdujo en XE.

Me resulta útil para pasar información de subprocesos de trabajo al subproceso principal u otros subprocesos de consumidor. La última parte, que tenía varios hilos de consumo, tenía errores por desgracia. Hubo un error en TMonitor, una clase presentada por Delphi 2009, utilizada para sincronizar el acceso a la cola en TThreadedQueue.

Esto ha sido arreglado para XE2. Ver tthreadedqueue-not-capable-of-multiple-consumers