C имеет много альтернатив, но это язык низкого уровня. Intel Thread Building Blocks - это коммерческая параллельная библиотека на базе Cilk, которая, как я слышал, хороша.
Это зависит от того, что вы хотите сделать для Python. Несмотря на то, что вы можете обойти GIL с помощью Cython, предварительно скомпилированного варианта Python, Cython медленно компилируется и теряет независимость от платформы. Кроме того, Python является языком сценариев, поэтому обычно вы хотите переключиться на более быстрый язык перед распараллеливанием. При этом, используя модуль multiprocessing
в Python (который разветвляется для обхода GIL), вы можете написать несколько простых параллельных кодов.
Java, вероятно, ваш лучший выбор. Ключевое слово synchronized
, а также приличные примитивы (например, неблокируемая очередь без блокировки) делают его относительно приятным. Хотя Java старая, поэтому вы тратите время на написание более подробного кода, чем Python.
Я медленно (постепенно) изучаю параллелизм в Хаскеле. Кажется, не так-то просто получить эффективный запуск, но если ваша задача довольно параллельна, то, похоже, она работает хорошо. И, конечно, Haskell невероятно выразителен (после того, как вы справитесь с этим, он сильно отличается синтаксически - по понятной причине, imho), и, поскольку он функционален, у вас не возникает странных проблем с повреждением состояния; в худшем случае ваш код не масштабируется. Существует множество библиотек, таких как STM (программная транзакционная память), которые, кажется, решают определенные проблемы намного лучше (в теории), чем примитивы, которые используют императивные программисты, такие как блокировки.