15

Ich bin in Multithreading, und GCD scheint wie ein viel bessere Option als manuell schreiben eine Lösung mit pthread.h und pthreads-win32. Wie auch immer, obwohl es so aussieht, als würde libdispatch entweder bearbeitet werden oder bald daran arbeiten, die meisten neueren POSIX-kompatiblen Systeme ... Ich muss fragen, was ist mit Windows? Wie sind die Chancen, dass libdispatch nach Windows portiert wird? Was sind die Barrieren, die das verhindern?Konnte Grand Central Dispatch (`libdispatch`) jemals unter Windows verfügbar gemacht werden?

Wenn es darauf hinausläuft, was würde I tun müssen, um diese Portage preform?

Edit: Einige Dinge, die ich bereits kennen, um die Diskussion zu erhalten begonnen:

  • Wir brauchen einen Block-kompatible Compiler, der auf Windows kompiliert, nicht wahr? Will PLBlocks damit umgehen?
  • Können wir den LLVM blocks runtime verwenden?
  • Können wir nicht alle pthread.h Abhängigkeiten in Userspace libdispatch mit APR-Anrufe ersetzen, für die Portabilität? Oder alternativ verwenden pthreads-win32 Ich nehme an ...

Edit 1: Ich höre, dass dies ganz und gar unmöglich, überhaupt, weil libdispatch abhängt (irgendwie) auf kqueue, die verfügbar werden, kann nicht auf gemacht Windows ... weiß jemand, ob das stimmt?

+3

Sie scheinen darauf zu bestehen, dass ein Port muss Windows Sei ein Source-Level-Port. Es ist nicht möglich - die Implementierung kann _vollständig_ anders sein, während die gleichen APIs beibehalten werden.Zum Beispiel würde ein dünner Wrapper um eine der Windows-Technologien, die ich in meiner Antwort erwähnte, pthread, PLBlocks, LLVM, kqueue oder irgendeine andere solche Komponente nicht erfordern, die für mich wie die Namen von nicht entzifferbaren ungarisch notierten Strukturzeigern klingen. –

+0

Nun, ich will nicht nur die API ... Ich möchte die Vorteile von GCD selbst, wenn etwas weniger performant wegen der fehlenden Kernel-Level-Optimierung. Wenn diese vorbestehenden Windows-Technologien schnüffeln, warum habe ich dann vor GCD nichts über sie gehört? – ELLIOTTCABLE

+0

"Buzz"? Srsly? Ist das wonach Sie suchen? Auf jeden Fall sind sie ziemlich neu (oder genauer, sie sind erst kürzlich Gold geworden), und ich weiß nicht wie es euch geht, aber ich höre genug von ihnen. Wenn die Google-Suchergebniszahl ein Hinweis auf "Buzz" ist, vergleichen Sie http://bit.ly/dk4ry9 mit http://bit.ly/9138DV oder einen BlogPulse 6-Monats-Vergleich: http://bit.ly/9L3VtM –

Antwort

5

Werfen Sie einen Blick auf: http://opensource.mlba-team.de/xdispatch/ Dieses Projekt (und andere Libs von Drittanbietern) bringt libdispatch in Plattformen (Windows, Linux) als macosx

+0

Wow, toller Fund! ([Bring ein wenig mehr Informationen von ihren verschiedenen Seiten] (http://meta.stackexchange.com/a/8259/140656) in Ihre Antwort hier würde gewinnen Sie eine weitere Verbesserung, sowie das Akzeptieren. Vielleicht eine Zusammenfassung von wie um es zu benutzen, kopiert von ihrer Seite und eine Liste von Plattformen, über die der Ansatz bekannt ist zu arbeiten? =) – ELLIOTTCABLE

1

Aus ein wenig Forschung scheint es, dass es schon ein gewisses Interesse an einem Hafen gibt, aber dieser Port wäre ein ziemlich drastisches Unterfangen und könnte im Grunde nur eine weitere Implementierung der API sein und nicht wirklich teilen Code mit dem ursprünglichen libdispatch. Ich sah einige Vorschläge für die Portierung von libdispatch auf der Apache Portable Runtime anstelle von POSIX, die es einfacher machen würden, es plattformübergreifend zu Windows zu machen, aber selbst dies wäre keine einfache Änderung.

Wahrscheinlich wäre dies keineswegs ein kleines Unternehmen.

+0

Wenn Sie für eine solche Bibliothek wirklich daran denken, eine andere Portabilitätsschicht hinzuzufügen, sind Sie ein sehr schlechter Programmierer, jeder Ansatz zu einer libdispatch wäre Barebone. – Lothar

1

Ich denke, dass es besser als libdispatch-on-pthreads und pthreads-on-Win32 oder libdispatch-on-APR und APR-on-Win32, libdispatch direkt auf dem Win32 Thread Pool API zu implementieren. Die gute Nachricht ist, dass die beiden APIs so ähnlich sind, dass Sie den Port wahrscheinlich selbst tun könnten. Die schlechte Nachricht ist, dass es wahrscheinlich viele Fälle gibt, in denen es kleine semantische Diskrepanzen gibt, die genaues Verhalten schwer zu erreichen machen.

5

Das Windows-Äquivalent von libdispatch, von meinem grundlegenden Verständnis davon, ist die Concurrency Runtime für nicht verwalteten Code und a collection of technologies zusammen als Parallel Extensions für verwalteten Code bekannt. Es scheint mir, dass GCD beides sehr gut abbildet, da beide Arbeitseinheiten (oder "Aufgaben") in ähnlicher Weise abstrahieren.

+1

ja das sind die gleichwertigen Technologien. http://blogs.msdn.com/nativeconcurrency ist das Teamblog für die Concurrency Runtime und http://blogs.msdn.com/pfxteam ist das .NET-Teamblog. – Rick