15

Estoy buscando en multihilo, y GCD parece una opción mucho más que escribir una solución manualmente usando pthread.h y pthreads-win32. Sin embargo, aunque parece que libdispatch está trabajando, o pronto va a funcionar, en la mayoría de los sistemas más nuevos compatibles con POSIX ... Tengo que preguntar, ¿qué pasa con Windows? ¿Cuáles son las posibilidades de que libdispatch se transfiera a Windows? ¿Cuáles son las barreras que impiden que eso suceda?¿Podría Grand Central Dispatch (`libdispatch`) estar disponible en Windows?

Si fuera necesario, ¿qué tendría que hacer I para preformar esa portadora?

Editar: Algunas cosas que ya conozco, para obtener la discusión comenzó:

  • necesitamos una bloques compatibles compilador que se compilará en Windows, no? ¿Lo manejará PLBlocks?
  • ¿Podemos utilizar el LLVM blocks runtime?
  • ¿No podemos reemplazar todas las dependencias pthread.h en el espacio de usuario libdispatch con llamadas APR, para la portabilidad? O, alternativamente, utilizar pthreads-win32 supongo ...

Edición 1: que estoy escuchando que esto es completamente y totalmente imposible, nunca, porque depende libdispatch (de alguna manera) en kqueue, que no puede ser puesto a disposición de Windows ... ¿Alguien sabe si esto es cierto?

+3

Parece que insistir en que un puerto de Windows debe ser un puerto de nivel de fuente. No es así: la implementación puede ser _completamente_ diferente, manteniendo las mismas API.Por ejemplo, una capa delgada alrededor de una de las tecnologías de Windows que mencioné en mi respuesta no requeriría pthread, PLBlocks, LLVM, kqueue o cualquier otro componente que me sonara como los nombres de los apuntadores de estructuras anotados en húngaro. –

+0

Bueno, no quiero solo la API ... Quiero los beneficios de GCD en sí, aunque un poco menos rendimiento debido a la falta de optimización del nivel kernel. Si estas tecnologías preexistentes de Windows están a la altura, ¿por qué no escuché ningún rumor sobre ellas antes de GCD? – ELLIOTTCABLE

+0

"Buzz"? ¿Srsly? ¿Es eso lo que estás buscando? En cualquier caso, son bastante nuevos (o más precisamente, solo se han vuelto oro recientemente), y no sé ustedes, pero estoy escuchando mucho sobre ellos. Si el recuento de resultados de búsqueda de Google es una indicación de "zumbido", compare http://bit.ly/dk4ry9 a http://bit.ly/9138DV o una comparación de BlogPulse de 6 meses: http://bit.ly/9L3VtM –

Respuesta

5

Tome un vistazo a: http://opensource.mlba-team.de/xdispatch/ Este proyecto (y otras librerías de terceros) trae libdispatch en las plataformas (Windows, Linux) que no sean MacOSX

+0

¡Guau, gran descubrimiento! ([Traer un poco más de información de sus diversas páginas] (http://meta.stackexchange.com/a/8259/140656) en su respuesta aquí le ganaría otro voto positivo, así como también la aceptación. Quizás un resumen de cómo para usarlo, copiado de su página, y una lista de plataformas a través de las cuales se sabe que funciona el enfoque? =) – ELLIOTTCABLE

1

Investigando un poco, parece que ya hay un poco de interés en un puerto, pero ese puerto sería una tarea bastante drástica y podría terminar siendo básicamente otra implementación de la API y no compartir realmente código con el libdispatch original. Vi algunas propuestas para portar libdispatch para que se basen en el Apache Portable Runtime en lugar de POSIX, lo que haría más fácil hacerlo multiplataforma a Windows, pero incluso esto no sería un cambio fácil.

Probablemente, esto no sería de ninguna manera una empresa pequeña.

+0

Si para esa biblioteca realmente piensa en agregar otra capa de portabilidad, es un programador muy malo, cualquier enfoque para libdispatch sería barebone. – Lothar

1

Creo que en lugar de libdispatch-on-pthreads y pthreads-on-Win32, o libdispatch-on-APR y APR-on-Win32, sería mejor implementar libdispatch directamente en Win32 Thread Pool API. La buena noticia es que las dos API son lo suficientemente similares como para que usted mismo pueda hacer el puerto. La mala noticia es que probablemente haya muchos casos de esquina donde haya pequeños desajustes semánticos que dificulten el comportamiento exacto.

5

El equivalente de Windows de libdispatch, desde mi comprensión básica de la misma, es el Concurrency Runtime para el código no administrado y a collection of technologies conocido colectivamente como Parallel Extensions para el código administrado. Me parece que GCD se corresponde bastante bien con ambos, ya que ambos abstraen unidades de trabajo (o "tareas") de manera similar.

+1

sí, estas son las tecnologías equivalentes. http://blogs.msdn.com/nativeconcurrency es el blog del equipo para Concurrency Runtime y http://blogs.msdn.com/pfxteam es el blog del equipo .NET. – Rick

Cuestiones relacionadas