Може ли Grand Central Dispatch (`libdispatch`) някога да бъде наличен в Windows?

Разглеждам многопоточността и GCD изглежда като много по-добър вариант от ръчното писане на решение с помощта на pthread.h и pthreads-win32. Въпреки това, въпреки че изглежда, че libdispatch или работи върху, или скоро ще работи върху повечето по-нови POSIX-съвместими системи... Трябва да попитам, какво ще кажете за Windows? Какви са шансовете libdispatch да бъде пренесен към Windows? Какви са бариерите, които пречат това да се случи?

Ако се сведе до това, какво би трябвало аз да направя, за да оформя този пренос?

Редактиране: Някои неща, които вече знам, за да започна дискусията:

  • Имаме нужда от компилатор, съвместим с блокове, който ще компилира в Windows, нали? PLBlocks ще се справи ли с това?
  • Можем ли да използваме LLVM блокове за изпълнение?
  • Не можем ли да заменим всички pthread.h зависимости в потребителското пространство libdispatch с APR повиквания за преносимост? Или, алтернативно, използвайте pthreads-win32 предполагам...

Редактиране 1: Чувам, че това е напълно и напълно невъзможно, никога, защото libdispatch зависи (някак си) от kqueue, който не може да бъде наличен в Windows... някой знае ли дали това е вярно?


person ELLIOTTCABLE    schedule 02.05.2010    source източник
comment
Изглежда настоявате, че портът на Windows трябва да бъде порт на ниво източник. Не е така - внедряването може да бъде напълно различно, като същевременно се поддържат същите API. Например, тънка обвивка около една от технологиите на Windows, които споменах в отговора си, няма да изисква pthread, PLBlocks, LLVM, kqueue или друг подобен компонент, който ми звучи като имената на неразшифровани структурни указатели с унгарски ноти.   -  person Allon Guralnek    schedule 03.05.2010
comment
Е, аз не искам само API... искам предимствата на самия GCD, макар и малко по-малко производителен поради липсата на оптимизация на ниво ядро. Ако тези вече съществуващи технологии на Windows са на ниво, тогава защо не съм чувал никакви шумове за тях преди GCD?   -  person ELLIOTTCABLE    schedule 03.05.2010
comment
Бъз? Srsly? Това ли търсиш? Във всеки случай те са доста нови (или по-точно, едва наскоро станаха златни) и не знам за вас, но аз чувам много шум за тях. Ако броят на резултатите от търсенето с Google е индикация за шум, сравнете bit.ly/dk4ry9 с bit.ly/9138DV или 6-месечно сравнение на BlogPulse: bit.ly/9L3VtM   -  person Allon Guralnek    schedule 04.05.2010
comment
Пет ORs срещу едно d-; Но във всеки случай интересно. Може би това е възможно решение; най-малкото би било добре да видите libdispatch API обвивка около тях.   -  person ELLIOTTCABLE    schedule 04.05.2010
comment
Вярно е, че има много имена за практически едно и също нещо и не знаех какви други ИЛИ да добавя за GCD (самият акроним носи много несвързани боклуци). И да, би било интересно да видим обвивка и за двете посоки.   -  person Allon Guralnek    schedule 04.05.2010


Отговори (5)


Разгледайте: http://opensource.mlba-team.de/xdispatch/ Това проект (и други библиотеки на трети страни) въвежда libdispatch в платформи (windows, linux), различни от macosx

person sprhawk    schedule 30.07.2013
comment
Уау, страхотна находка! (Внасянето на малко повече информация от различните им страници в отговора ви тук ще ви спечели още един глас за, както и приемете. Може би обобщение на това как да го използвате, копирано от тяхната страница; и списък с платформи, за които е известно, че подходът работи? =) - person ELLIOTTCABLE; 20.12.2015

https://github.com/DrPizza/libdispatch

person DrPizza    schedule 24.06.2011
comment
Страхотна работа и също публикации в блогове. Няма актуализации отпреди няколко години. Все още ли функционира? - person kakyo; 09.09.2019

Еквивалентът на Windows на libdispatch, според моето основно разбиране за него, е Concurrency Runtime за неуправляван код и a колекция от технологии, известни като Паралелни разширения за управляван код. Струва ми се, че GCD картографира доста добре и двете, тъй като и двете абстрактни работни единици (или „задачи“) по подобен начин.

person Allon Guralnek    schedule 02.05.2010
comment
да, това са еквивалентните технологии. blogs.msdn.com/nativeconcurrency е екипният блог за Concurrency Runtime и blogs.msdn.com/pfxteam е блогът на екипа на .NET. - person Rick; 02.05.2010
comment
Това достъпно ли е за C++? - person kakyo; 09.09.2019
comment
@kakyo Да, Concurrency Runtime е за C++11: docs.microsoft.com/en-us/cpp/parallel/concrt/ - person Allon Guralnek; 10.09.2019

От малко проучване изглежда, че вече има доста голям интерес към порт, но този порт би бил доста драстично начинание и може да се окаже просто още една реализация на API и всъщност да не споделя значителен код с оригиналния libdispatch. Видях някои предложения за пренасяне на libdispatch да бъде базиран на Apache Portable Runtime вместо на POSIX, което би улеснило превръщането му между платформи в Windows, но дори това няма да е лесна промяна.

Вероятно това никак не би било малко начинание.

person Kitsune    schedule 02.05.2010
comment
Ако за такава библиотека наистина мислите за добавяне на друг слой за преносимост, вие сте много лош програмист, всеки подход към libdispatch би бил barebone. - person Lothar; 15.11.2015

Мисля, че вместо libdispatch-on-pthreads и pthreads-on-Win32, или libdispatch-on-APR и APR-on-Win32, може би е по-добре да внедрите libdispatch директно на Win32 API на пул нишки. Добрата новина е, че двата API са достатъчно сходни, че вероятно бихте могли да направите порта сами. Лошата новина е, че вероятно ще има много ъглови случаи, при които има малки семантични несъответствия, които правят точното поведение трудно постижимо.

person Gabe    schedule 02.05.2010