The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Релиз языка программирования Haxe 4.1, opennews (ok), 17-Май-20, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


12. "Релиз языка программирования Haxe 4.1"  –1 +/
Сообщение от Аноним (12), 17-Май-20, 14:00 
Расскажи нам, зачем же нужен GIL? Почему нельзя без GIL обойтись?
Ответить | Правка | К родителю #6 | Наверх | Cообщить модератору

16. "Релиз языка программирования Haxe 4.1"  +2 +/
Сообщение от jOKer (ok), 17-Май-20, 14:25 
Может быть потому что без GIL весьма велика вероятность возникновения состояния "гонка за ресурсами", а накладные расходы интерпретатора существенно возрастают?

ЗЫ Вообще-то на этот вопрос, в свое время, Гвидо уже ответил весьма и весьма развернуто. Больше читаем, и меньше возмущаемся на формах, приятель. А заодно учимся понимать как могут помочь делу сопрограммы, и почему в бинарных библиотеках ограничения GIL не действуют.

Ответить | Правка | Наверх | Cообщить модератору

20. "Релиз языка программирования Haxe 4.1"  +1 +/
Сообщение от Вы забыли заполнить поле Name (?), 17-Май-20, 14:56 
> и почему в бинарных библиотеках ограничения GIL не действуют

Пока к питоновским структурам дынных не обращаешься, иначе нужна синхронизация?

Ответить | Правка | Наверх | Cообщить модератору

39. "Релиз языка программирования Haxe 4.1"  –1 +/
Сообщение от jOKer (ok), 17-Май-20, 18:56 
Тут все немного сложнее. Событийно-ориентированного механизма на этом уровне нет. Следовательно, требуется реализовать несколько нитей-тредов и заставить один из них тупо ждать пока бинарная библиотека не отработает.

В момент, когда такой поток делает запрос к бинарной библиотеке он отпускает GIL (глобальная блокировка так же отпускается при переходе потока-владельца в ожидание событий ввода-вывода и каждые 100 тиков проца), и другие нити могут спокойно в это время работать. Когда же от бинарной библиотеки приходит ответ, то нить может сохранить полученный ответ в очереди для использования другими потоками. Конечно, в этот момент /момент сохранения/ так же будут действовать правила GIL, но это будет уже не так важно, потому что тяжелые много-поточные вычисления, реализованные на уровне внешней библиотеки, к этому моменту уже будут завершены.

Ответить | Правка | Наверх | Cообщить модератору

43. "Релиз языка программирования Haxe 4.1"  +/
Сообщение от анонимут (?), 17-Май-20, 20:12 
Чтобы обойти ущербность Python разрабатывали вложенные интерпретаторы для обхода GIL, но что-то пошло не так. Запустить несколько экземпляров Python интерпретаторов реализуемо. Pandas и Numpy это расширения написанные на C. Me
Ответить | Правка | Наверх | Cообщить модератору

47. "Релиз языка программирования Haxe 4.1"  +1 +/
Сообщение от jOKer (ok), 17-Май-20, 21:37 
> Чтобы обойти ущербность Python разрабатывали вложенные интерпретаторы для обхода GIL,
> но что-то пошло не так. Запустить несколько экземпляров Python интерпретаторов реализуемо.
> Pandas и Numpy это расширения написанные на C. Me

Несколько интерпретаторов... точнее субинтрепретаторы (subinterpreters) появились совсем недавно, в питоне 3.8, и в данный момент их реальное использование, я бы сказал, действительно натыкается на ряд концептуальных проблем (маршалинг штука медленная, а идея общей памяти с указателями пока не имеет своего пепа, насколько мне известно). Так что, ИМХО, фича является скорее эксперементальной, нежели реально работающей в продуктиве. Хотя концепция очень интересная, поскольку субинтерпретаторы легче чем процессы, хотя и тяжелее нитей, в смысле накладных расходов на их запуск.

Но еще раз - это все только-только появилось. Так что кукарекать о том, что "что-то пошло не так" немного рановато))) Хотя те, кто о питоне судит в русле его "ущербности" как раз так и кукарекают.

Ответить | Правка | Наверх | Cообщить модератору

74. "Релиз языка программирования Haxe 4.1"  +2 +/
Сообщение от анонимут (?), 19-Май-20, 12:14 
Одна из причин ущербности Python это реальная мультипоточность которая может быть только в расширениях, но это уже совсем другой язык C. Синонимы к слову ущербность недостаточность и неполноценность.
Ответить | Правка | Наверх | Cообщить модератору

40. "Релиз языка программирования Haxe 4.1"  +1 +/
Сообщение от Owlet (?), 17-Май-20, 19:58 
Он позволяет не беспокоиться о состояниях гонки внутри интерпретатора. Использование для этого более гранулярных локов очень сильно затормозило бы однопоточные программы, для которых питон чаще всего и используют. А введение async/await (ну и всякие twisted с greenlet) позволяют и сетевые программы успешно писать.
Ответить | Правка | К родителю #12 | Наверх | Cообщить модератору

44. "Релиз языка программирования Haxe 4.1"  +1 +/
Сообщение от topin89 (ok), 17-Май-20, 20:36 
> Для чего нужен GIL?

Он нужен для конкурентной многозадачности без сложного кода атомарного доступа к одним и тем же объектам из разных потоков. Это нужно, чтобы банальное присвоение любого объекта не прерывалось на середине. Я не знаю, когда был введён GIL, но судя по патчу для Python 1.4, который его удаляет, в 1996 году он уже стал частью Питона.

Глобальный блокировщик -- идея очень простая, и введена как раз поэтому. Да, она не позволяет работать на множестве ядер, но будем честными, в 1996 году об этом точно никто не задумывался. Я не знаю, когда именно был введён GIL, но первые x86 двухядерные процы появились сильно позже, да и многопроцессорные системы были достаточно редкими, чтобы о них париться.

В ядре линукса было что-то похожее, Big Kernel Lock

> Почему нельзя без GIL обойтись?

Можно. Если есть деньги на развитие и поддержку проекта, то вполне можно заменить мегалок на много атомарных. В Джаве нет. В Шарпе нет. В Linux нет с 2011 года (заметим, спустя шесть лет с выхода многоядерного x86).

Но это сложно, однозначно приведёт огромному количеству сложноуловимых багов и на первых порах сильно просадит однопоток. А на последних сделает добавление новых фич очень затратным делом.

Теперь ответ на вопрос, а какие есть альтернативы в Питоне: многопроцесность. Да, как в хроме, можно запустить питонов по количеству ядер и организовать проброс сообщений между ними через очереди (Queue). В большинстве случаев этого хватает. Тот же flask так делает. Часто сложный, долгий код выносят в C(++), где можно наплодить потоков как душе угодно, если они не меняют в разных потоках переменные питоновского кода.

Кстати, GIL -- это то самое "лучше чем ничего". Года три назад, в PHP многопоток был небезопасен, в JavaScript его не было вовсе, в Lua каком-нибудь и до сих пор нет. В нативных языках типа C(++) или Fortran атомарное присвоение не гарантируется, там проще. В Rust подрублен серьёзный статический анализ. Не знаю, как там в остальных языках.

Ответить | Правка | К родителю #12 | Наверх | Cообщить модератору

46. "Релиз языка программирования Haxe 4.1"  –2 +/
Сообщение от Вы забыли заполнить поле Name (?), 17-Май-20, 21:30 
> Кстати, GIL -- это то самое "лучше чем ничего". Года три назад, в PHP многопоток был небезопасен, в JavaScript его не было вовсе

В JavaScript такая же кооперативная многозадачность, чем по сути GIL и является. Ну а node.js в libuv есть пул потоков.

> В нативных языках типа C(++) или Fortran атомарное присвоение не гарантируется, там проще.

В C++ начиная с 11 года стандартизирована модель памяти и есть атомики.

Ответить | Правка | Наверх | Cообщить модератору

75. "Релиз языка программирования Haxe 4.1"  +/
Сообщение от анонимут (?), 19-Май-20, 12:18 
> Глобальный блокировщик -- идея очень простая, и введена как раз поэтому

От которой постоянно пытаются избавиться

Так Python создавался для обработки текста. И как замена bash скриптам ok. Но писать на нем приложения в десятки тысяч строк идиотизм потому что они рассыпаются из-за обычных опечаток. Или писать миллионы тестов

Ответить | Правка | К родителю #44 | Наверх | Cообщить модератору

77. "Релиз языка программирования Haxe 4.1"  +1 +/
Сообщение от Вы забыли заполнить поле Name (?), 19-Май-20, 17:23 
> Так Python создавался для обработки текста.

Откуда инфа? Это про perl.

>  потому что они рассыпаются из-за обычных опечаток

Ну это претензия к любому динамически типизируеимому языку. Да и зависит от связности кода. А по теме есть опциональная проверка типов.

Ответить | Правка | Наверх | Cообщить модератору

76. "Релиз языка программирования Haxe 4.1"  +/
Сообщение от Аноним (76), 19-Май-20, 13:51 
> В Rust подрублен серьёзный статический анализ.

Который предотвращает только data races (подкласс race conditions). Это, конечно, облегчает, но не избавляет от необходимости следить за низкоуровневыми деталями реализации многопоточности.
Для стандартных задач принято использовать либы напр. https://github.com/rayon-rs/rayon и
https://tokio.rs/ | https://async.rs/

Ответить | Правка | К родителю #44 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру