Может ли Grand Central Dispatch (`libdispatch`) быть когда-либо доступным в Windows? - PullRequest
15 голосов
/ 02 мая 2010

Я смотрю на многопоточность, и GCD выглядит как намного лучший вариант, чем ручное написание решения с использованием pthread.h и pthreads-win32. Однако, хотя похоже, что libdispatch либо работает, либо скоро начнет работать, на большинстве новых POSIX-совместимых систем ... Я должен спросить, а как насчет Windows? Каковы шансы, что libdispatch будет портирован на Windows? Какие барьеры мешают этому произойти?

Если бы все сводилось к тому, что I нужно было бы сделать, чтобы преформовать этот перенос?

Редактировать: Некоторые вещи, которые я уже знаю, чтобы начать обсуждение:

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

Редактировать 1: Я слышал, что это совершенно и абсолютно невозможно, потому что libdispatch зависит (как-то) от kqueue, что невозможно доступно в Windows ... кто-нибудь знает, правда ли это?

Ответы [ 5 ]

7 голосов
/ 24 июня 2011
6 голосов
/ 30 июля 2013

Взгляните на: http://opensource.mlba -team.de / xdispatch / Этот проект (и другие сторонние библиотеки) переносит libdispatch на платформы (windows, linux), кроме macosx

5 голосов
/ 02 мая 2010

Windows-эквивалент libdispatch, исходя из моего базового понимания, - это Параллельная среда выполнения для неуправляемого кода и набор технологий , вместе именуемых Parallel Extensions для управляемого кода. Мне кажется, что GCD довольно хорошо сопоставляется с обоими из них, поскольку они оба абстрагируют рабочие единицы (или «задачи») одинаковым образом.

1 голос
/ 02 мая 2010

Я думаю, что вместо libdispatch-on-pthreads и pthreads-on-Win32 или libdispatch-on-APR и APR-on-Win32, может быть лучше реализовать libdispatch непосредственно в Win32 API пула потоков . Хорошая новость заключается в том, что два API-интерфейса достаточно похожи, так что вы, вероятно, можете сделать порт самостоятельно. Плохая новость заключается в том, что, вероятно, будет много угловых случаев, когда есть небольшие семантические несоответствия, которые затрудняют точное поведение.

1 голос
/ 02 мая 2010

Из небольшого исследования выяснилось, что порт уже достаточно интересен, но этот порт был бы довольно радикальным мероприятием и мог бы в итоге стать просто еще одной реализацией API и фактически не делиться значительным кодом. с оригинальным libdispatch. Я видел некоторые предложения по переносу libdispatch на основе Apache Portable Runtime вместо POSIX, что упростило бы его кроссплатформенность для Windows, но даже это было бы нелегко.

Вероятно, это ни в коем случае не будет маленьким начинанием.

...