GIL в Python 3.1

Следующее объясняет, как сделать это в C#, но то же самое понятие относится к любому языку программирования, который поддерживал бы шаблон "одиночка"

http://www.yoda.arachsys.com/csharp/singleton.html

, Что необходимо решить, хотите ли Вы ленивую инициализацию или нет. Ленивая инициализация означает, что объект, содержавший в одиночном элементе, создается на первом вызове к ней исключая:

MySingleton::getInstance()->doWork();

, если тот вызов не выполняется до позже, существует опасность состояния состязания между потоками, как объяснено в статье. Однако, если бы Вы помещаете

MySingleton::getInstance()->initSingleton();

в самом начале Вашего кода, где Вы предполагаете, что это было бы ориентировано на многопотоковое исполнение, тогда Вы больше не ленивая инициализация, Вы еще потребуете "немного" вычислительная мощность, когда Ваше приложение запустится. Однако это решит много головных болей об условиях состязания, если Вы сделаете так.

16
задан Dewfy 3 August 2009 в 15:18
поделиться

5 ответов

GIL все еще присутствует в CPython 3.1; проекты Unladen Swallow нацелены (среди многих других улучшений производительности) на то, чтобы в конечном итоге удалить его, но он все еще далек от поставленных целей, и сначала работает над 2.6 с намерением в конечном итоге портировать на 3.x что угодно x будет актуальным к тому моменту, когда версия 2.y будет считаться завершенной. На данный момент многопроцессорность (вместо потоковой передачи) остается предпочтительным способом использования нескольких ядер в CPython (IronPython и Jython тоже подходят, но в настоящее время они не поддерживают Python 3 и не упрощают интеграцию с C ++; - ).

25
ответ дан 30 November 2019 в 15:23
поделиться

GIL не повлияет на ваш код, который не использует объекты Python. В Numpy мы выпускаем GIL для вычислительного кода (вызовы линейной алгебры и т. Д.), А базовый код может свободно использовать многопоточность (фактически, это обычно сторонние библиотеки, которые ничего не знают о python)

9
ответ дан 30 November 2019 в 15:23
поделиться

GIL - это хорошо.

Просто создайте ваше приложение C ++ выпускает GIL, пока выполняет свою многопоточную работу. Код Python будет продолжать работать в других потоках без изменений. Получите GIL только тогда, когда вам нужно прикасаться к объектам Python.

4
ответ дан 30 November 2019 в 15:23
поделиться

Думаю, GIL будет всегда. Причина в производительности. Обеспечение потоковообезопасности всего низкоуровневого доступа - означает, что размещение мьютекса вокруг каждой операции хеширования и т. Д. - это сложно. Помните, что простой оператор вроде

self.foo(self.bar, 3, val)

может уже иметь по крайней мере 3 (если val является глобальным) поиском по хеш-таблице на данный момент и, возможно, даже больше, если кеш метода не горячий (в зависимости от глубины наследования класса)

Это дорого - вот почему Java отказалась от этой идеи и представила хэш-таблицы, которые не используют вызов монитора, чтобы избавиться от своего товарного знака «Java Is Slow»

1
ответ дан 30 November 2019 в 15:23
поделиться

Значительные изменения произойдут в GIL для Python 3.2. Посмотрите на Что нового для Python 3.2 и нить, которая инициировала его в списке рассылки .

В то время как изменения не означают конец Гила, они геральд потенциально огромные успехи.

Update0

  • Общие достижения производительности с новым GIL в 3.2 Antoine Pitrou были незначительными, и вместо этого сосредоточились на улучшении вопросов соперника , которые возникают в определенных угловых случаях.
  • Немечаемое усилие было предпринято Дэвидом Бекли.
  • Работа «Ненадельную глотание» предложена для объединения в Python 3.3, но это было отозвано из-за отсутствия результатов в этом проекте. Pypy теперь является предпочтительным проектом и в настоящее время в настоящее время запрашивая финансирование для добавления поддержки Python3k. Там очень мало шансов, что Pypy станет по умолчанию в настоящее время.

были сделаны усилия за последние 15 лет, чтобы удалить Гил из CPYthon, но в обозримом будущем, оно здесь, чтобы остаться.

17
ответ дан 30 November 2019 в 15:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: