Найти - Пользователи
Полная версия: GIL
Начало » Флейм » GIL
1 2 3 4 5 6 7
doza_and
xneo
Если я ошибаюсь и питон (именно CPython) каким-то образом всё же может использовать в одном процессе весь CPU, покажите где я ошибаюсь.
Давайте конкретнее. Мощь CPU. Это счетные задачи разного вида. Так? У них код обычно такой:

import numpy as np
a1=np.ones((10000,10000))
b1=np.ones((10000,10000))
a2=np.ones((10000,10000))
b2=np.ones((10000,10000))
for i in range(50):
   c1=np.dot(a1,b1)
   c2=np.dot(a2,b2)
  ....
По условию вы нашли куски кода которые можно независимо выполнить ну тут эти скаляные произведения. Это очевидно нужно вообще в любом языке.

Дальше попробуйте использовать многострадальный threding. Да есть GIL. Но вы обнаружите что этот питоновский код отлично грузит все ядра. И считает тоже быстрее в многопоточном режиме.

Почему? Потому что любая числодробильная задача включает много кусков “native” кода. А на этот код ограничения не распространяются. Более того, хорший “native” код уже распараллелен. Поэтому в самом питоне часто вообще треды не надо создавать.

Имплантировать “native ” в питон вообще не составляет труда. Таких модулей очень много, потчи на любые задачи. Надо будет - сами сделаете в пару строчек.

Собственно вот что вы хотели. Один процесс и эффективная загрузка всех ядер.
А на чистом питоне да, такой возможности нет.
Но в реальных проектах практически не бывает чистого питона.
ZZZ
Да, 4kpt_III, отвечать ему, это херня. Больше не буду.
Если эта херня и правда была в топе фриланса, то мне страшно представить, кто ж ещё там был…
xneo
ZZZ, Солнышко, не дуйся. Ты же первый начал грубить
4kpt_III
ZZZ
Не порть карму. Я же тебе уже сказал. Это вопрос из разряда: а можно ли к самолету прицепить прицеп? И если теоретически можно, то где посмотреть раскраски.
ZZZ
4kpt_III, да чем я её порчу? Если человек не умеет случать, то грош – его цена. Не нужен такой питонщик. Пусть дальше сайты-визитки на вордпрессе делает… :-)
4kpt_III
ZZZ
да чем я её порчу

Да тем, что объясняешь по 2 раза вещи, которые после первого объяснения хороший программист и так поймет. Только время свое тратишь. Лучше бы по хенгауту лясы поточили

ZZZ
Не нужен такой питонщик.

Ну почему же сразу не нужен… Хотя да. Все же не нужен.
py.user.next
FishHook
py.user.next
То, что Firefox падает, - так они его переписали на Java
ЩИТО?
А можно пруф?
Это где-то читал.

https://ru.wikipedia.org/wiki/Mozilla_Firefox
https://ru.wikipedia.org/wiki/XUL
Возможно, это XUL, но суть в том, что окна и вкладки стали медленно открываться. Вся программа в целом стала какой-то неповоротливой.
Строки из top:
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND     
1525 guest 20 0 1185168 304756 54952 S 0,0 15,8 2:48.95 firefox
1969 guest 20 0 359908 30564 16668 S 0,0 1,6 0:01.64 emacs
1990 guest 20 0 750232 176620 36776 S 0,0 9,2 0:04.11 thunderbird
2055 guest 20 0 408812 54188 21364 S 0,0 2,8 0:02.54 gimp-2.8
Больше никто столько памяти не жрёт.

JOHN_16
Какие из этого выводы можно сделать - что парсер HTML написан на Java.
Где-то читал, что переписали его на Java, а потом поставил и там значительно изменился дизайн. Вот я и подумал, что он теперь на Java. Тормознутость окон меня ещё больше в этом убедила.

lorien
Вот в этом вся суть вопроса. Если я ошибаюсь и питон (именно CPython) каким-то образом всё же может использовать в одном процессе весь CPU, покажите где я ошибаюсь.
Может. GIL ограничивает работу только python-кода, он не ограничивае работу C-кода т.е. любого фунционала вынесенного в бинарные расширения. Хорошоий тому пример всем известная библиотека lxml. Можно загрузить все ядра процессора одним python процессом, который в нескольких тредах будет использовать lxml. Другой пример, использование библиотеки numpy для перемножения матриц. Точно так же можно загрузить все ядра процессора. Возможно, ты что-то другое спрашивал, лень весь топик перечитывать :)
xneo
lorien
Может. GIL ограничивает работу только python-кода, он не ограничивае работу C-кода т.е.
Конечно, если потоки будут работать на стороне внешней библиотеки, тогда да. Библиотека получает входные параметры и, если в данный момент не обращается к объектам/функциям питона, может отпустить GIL.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB