Недавно изучив Центральную Отправку, я нашел, что многопоточный код довольно интуитивен (с GCD). Мне нравится то, что никакие блокировки не требуются (и то, что это использует незапертые структуры данных внутренне), и что API очень прост.
Теперь, я начинаю изучать pthreads, и я не могу не быть немного переполненным сложностью. Соединения потока, взаимные исключения, условные переменные - все эти вещи не необходимы в GCD, но имеют много вызовов API в pthreads.
pthreads обеспечивает какие-либо преимущества перед GCD? Действительно ли это более эффективно? Есть ли случаи нормальной эксплуатации, где pthreads может сделать вещи, которые GCD не может сделать (исключая программное обеспечение уровня ядра)?
С точки зрения межплатформенной совместимости я не слишком заинтересован. В конце концов, libdispatch является открытым исходным кодом, Apple имеет submtited их изменения закрытия как патчи к GCC, лязг поддерживает закрытия, и уже (e.x. FreeBSD), мы начинаем видеть некоторые реализации не-Apple GCD. Мне интересно главным образом используемый из API (определенные примеры были бы яркими!).
Это ошеломляющее ощущение, что вы испытываете .. Это именно поэтому ГХД был изобретен.
На самом базовом уровне есть темы, Pthreads - это POSIX API для потоков, чтобы вы могли записать код в любой совместименной ОС и ожидать его на работу. GCD построен на верхней части нитей (хотя я не уверен, что на самом деле используются Pthreads в качестве API). Я верю, что GCD работает только на ОС X и IOS - что в двух словах - это его главный недостаток.
Обратите внимание, что проекты, которые вводят тяжелое использование потоков и требуют высокой производительности, реализуют свою собственную версию пулов резьбы. GCD позволяет избежать (Re) изобретать колесо для разумного времени.
GCD - это технология Apple, а не самая поперечная платформа, совместимая; Pthread доступны практически обо всем, от OSX, Linux, Unix, Windows .. в том числе GCD Toaster
, оптимизирован для параллелизма пула резьбы. Pthreads (как вы говорили) Очень сложные строительные блоки для параллелизма, вы остаетесь разработать свои собственные модели. Я настоятельно рекомендую поднять книгу по теме, если вы заинтересованы в обучении больше о Pthreads и различных моделях параллелизма.
Похоже, что ошибка в гибернации:
http://opensource.atlassian.com/projects/ibernate/browse/hhhhhth-123
-121--3950718-Как любой декларативный / вспомогательный подход, как OpenMP или GCD GCD GCD GCD GCD GCD, должен быть очень хорош в , смутительно параллельных проблем, и, вероятно, легко побит наивным вручную Pthread-Ed Parallel Sort. Я бы предположил, что вы все еще изучаете Pthreads, хотя. Вы сможете лучше понять параллелизм, вы сможете применить правильный инструмент в каждой конкретной ситуации, и если да не больше - есть тонна кода на основе Pthread, вы сможете прочитать код «устаревшего».