OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 22 Июнь, 2018 16:03

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 16 ] 
Автор Сообщение
 Заголовок сообщения: Goroutines и гонки
СообщениеДобавлено: Вторник, 18 Июль, 2017 15:28 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 8954
Откуда: Россия, Орёл
Синтаксис и семантика Goroutines в Go недурна. Те же сопрограммы.
С явной точкой переключения.
Однако их исполняет несколько потоков.
Т.е. вместо того, чтобы декларировать, что все горутины по-умолчанию неконкурентны (т.е. все объекты общего назначения и проч. пишутся без необходимости думать о конкурентности), и разрешить отправлять горутину на конкурентное исполнение только явно (когда это изолированно что-то считающая или интерфейсная с внешним миром горутина - в реализации библиотеки-биндинга где-то), был принят подход конкурентного исполнения горутин.

Ну и... "довели бабы (треды) да кабаки (разделяемые объекты) до цугундера (гонок)".

https://habrahabr.ru/post/333346/

Цитата:
Другая проблема, которую мы могли бы хотеть решить после выхода Go 1 был факт того, что горутины и разделённая (shared) память позволяли слишком легко создать ситуацию гонки (races) в Go программах, приводящих к падениям и прочим проблемам в работе. Решение, основанное на изменении языка, могло бы заключаться в том, чтобы найти какой-то способ гарантировать отсутствие ситуаций гонки, сделать так, чтобы такие программы не компилировались, например. Как это сделать для такого языка, как Go пока что остается открытым вопросом в мире языков программирования. Вместо этого мы добавили базовый инструмент, который очень просто использовать — этот инструмент, детектор гонок (race detector) стал неотъемлемой частью опыта работы с Go. В этом случае наилучшим решением оказалось изменение в runtime и в инструментарии, а не изменение языка.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Goroutines и гонки
СообщениеДобавлено: Вторник, 18 Июль, 2017 16:45 

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 7827
Откуда: Троицк, Москва
Я и говорю: самовлюблённое чмо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Goroutines и гонки
СообщениеДобавлено: Четверг, 20 Июль, 2017 13:40 
Аватара пользователя

Зарегистрирован: Воскресенье, 12 Апрель, 2015 18:12
Сообщения: 1064
Откуда: СССР v2.0 rc 1
Info21 писал(а):
Я и говорю: самовлюблённое чмо.

Не вписываетесь Фёдор Васильевич в политкорректное западное толерантное общество))
Так и будем мы все вместе диким народом не без некоторого удовольствия))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Goroutines и гонки
СообщениеДобавлено: Вторник, 12 Сентябрь, 2017 22:46 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1315
Info21 писал(а):
Я и говорю: самовлюблённое чмо.

О чём и ком речь?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Goroutines и гонки
СообщениеДобавлено: Вторник, 12 Сентябрь, 2017 23:55 

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 7827
Откуда: Троицк, Москва
Wlad писал(а):
Info21 писал(а):
Я и говорю: самовлюблённое чмо.

О чём и ком речь?
О Go 1 и его сочинителях.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Goroutines и гонки
СообщениеДобавлено: Среда, 13 Сентябрь, 2017 00:26 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 686
Откуда: Казань
Кстати о птичках, о невидимой связи между go и Обероном:
Цитата:
And yes, Go has relation to (impact by) Oberon technologies (developed in ~1988).
Robert Griesemer, one of designers of Go, came from Wirth's school of compilers.

https://www.quora.com/How-does-the-Go-language-compile-so-fast-compared-to-Java

Некоторые его публикации:
"A programming language for vector computers", Robert Griesemer, 1993 (диссертация про язык программирования Oberon-V)
"Object Oberon: An object-oriented extension of Oberon" Hanspeter Mössenböck; Josef Templ; Robert Griesemer
"On the linearization of graphs and writing symbol files"; Oberon technical notes, Robert Griesemer; Beat Heeb; Josef Templ; Cuno Werner Pfister

К сожалению диссертацию не нашел в отрытом виде и поэтому не знаю, что там про Oberon-V говорится.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Goroutines и гонки
СообщениеДобавлено: Среда, 13 Сентябрь, 2017 01:27 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 8954
Откуда: Россия, Орёл
Есть у нас региональный чатик веб-разработчиков орловских (Ruby, JS и др.)
Послеживаю краем глаза, иногда кое-что рассказываю про Обероны.

Настрой не-холиварный, вообще, я смотрю, поскольку профессия программиста перестала быть модно-звёздной, в последние годы как-то больше пошло просто ремесленнического (в хорошем смысле этого слова) подхода, чем прежней бойни самолюбивых "гениев".

Но я, собственно, вот о чём. Один из участников чата сказал следующую фразу:
Цитата:
Разработчики на Go мне яро напоминают воинствующих мусульман в мире IT. Аллах сказал им писать на Go, и дальше они под это будут агрессивно проталкивать любую ложь и переворачивать любую истину. За всё время не встречал более упоротых поклонников технологии, чем эти ребята. Подозреваю, там где-то есть зомбирующие коды и мануалы. (c)


Т.е. даже на "пригашенный" (и несколько "пригаженный") относительно Оберона Go есть привычная нам реакция.
Видимо, раздражителем является сочетание "минималистичный - строго типизированный - императивный - повседневно-промышшленный-универсальный".

В случае с Оберонами же добавляется ещё "осмеливающийся переть вообще против рынка" (т.е. претендовать не на экспериментальный и/или маргинальный, а максимально широкий статус, не будучи поддержан корпоративным гигантом типа Google).
А, да, ещё добавляется паскалевский синтаксис (несмотря на то, что холивары отошли немного в прошлое, поколения подсменились, но есть мем "Паскаль ушёл со сцены, Си победил" - а тут вдруг прут против мема).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Goroutines и гонки
СообщениеДобавлено: Среда, 13 Сентябрь, 2017 11:11 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 643
Откуда: Киев
Это фраза с habrahabr из обсуждения статьи
Цитата:
Создатель Node.js: «Для серверов я не могу представить другой язык кроме Go»

Находят же, что цитировать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Goroutines и гонки
СообщениеДобавлено: Четверг, 05 Октябрь, 2017 15:27 
Аватара пользователя

Зарегистрирован: Воскресенье, 12 Апрель, 2015 18:12
Сообщения: 1064
Откуда: СССР v2.0 rc 1
Почему нет?
Если нет понимания, что просто/сложно, надёжно/хрупко, лаконично/избыточно -- чего ещё хотеть от подобных коллег?
Ко всему прочему, в одной из статей на хабре (совсем свежих) -- есть отличная статья о том, что куда бабки влили -- там и освоение. На скорость. Главное, погромче орать. А баги мы потом как фичи пропиарим.
Когда осваиваешь бюджет, уже не до науки, а то тог ои гляди соседи кусок изо рта выхватят.
Поэтому, Go -- круто, но состояние гонок через пяток лет пофиксим. Может быть. Наверное.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Goroutines и гонки
СообщениеДобавлено: Пятница, 06 Октябрь, 2017 23:24 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1438
Мне кажется Go никто не любит из-за того, что он скучный. И это действительно так.
Даже в классическом Обероне можно самовыражаться до усраки. Хоть бы с тем же оформлением кода.
А в Go хрен. Там все как в армии. Ощущаешь себя натуральным Another Brick In The Wall

А по поводу горутин я тебя не понял, Илья. Их делали не ради горутин, а чтобы эффективно утилизировать ядра на серверах. То, что они там поют про "concurrency is not parallelism" - это реклама. Никому эти корутины не всрались на самом деле. Миром правят OpenMP, MPI и CUDA если кто до сих пор не в курсе. И все это нормально пашет только на плюсах. И так будет еще *цать лет.
Настоящая цель горутин - это уменьшение расходов, за счет технологии. Гугл туда бабки льёт не ради горутин самих по себе.
И про замену плюсам - думаю тоже чисто реклама (ну или влажные фантазии создателей).
Го - это замена питону и руби. И в однопоточной производительности и в утилизации многоядерных серверов.
И все это про задние концы и микроуслуги. Все остальное на го делать не шибко удобно.
Тот же свифт гораздо приятнее язык.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Goroutines и гонки
СообщениеДобавлено: Пятница, 06 Октябрь, 2017 23:42 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1438
ilovb писал(а):
Мне кажется Go никто не любит из-за того, что он скучный. И это действительно так.


А еще такой вброс в продолжение мысли:
Что, если го - это пристанище для не вполне уверенных в себе молодых людей?
Он же типа уравнивает всех. Теперь этим выскочкам придется писать как я! Огонь!
:D
Ну и оппозиция сразу понятна между гоферами и негоферами.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Goroutines и гонки
СообщениеДобавлено: Воскресенье, 08 Октябрь, 2017 20:14 

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 7827
Откуда: Троицк, Москва
ilovb писал(а):
Что, если го - это пристанище для не вполне уверенных в себе молодых людей?
Вся сфера IT такое пристанище.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Goroutines и гонки
СообщениеДобавлено: Понедельник, 12 Март, 2018 23:09 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 125
Илья Ермаков писал(а):
Синтаксис и семантика Goroutines в Go недурна. Те же сопрограммы.
С явной точкой переключения.
Однако их исполняет несколько потоков.
...
Ну и... "довели бабы (треды) да кабаки (разделяемые объекты) до цугундера (гонок)".


А разве для гонок нужно несколько тредов? Вот пример из доки по race detector .
Код:
func main() {
   var wg sync.WaitGroup
   wg.Add(5)
   for i := 0; i < 5; i++ {
      go func() {
         fmt.Println(i) // Not the 'i' you are looking for.
         wg.Done()
      }()
   }
   wg.Wait()
}

Али на ББ с корутинами такого же результата не добиться?
ИМХО гонки возникают не из-за тредов, а из-за параллельности как таковой. Когда есть некий объект, разделённый между несколькими деятелями, и которые могут с ним что-то делать параллельно и независимо друг от друга. Да, если тред один, то каждый кусок между передачами управления планировщику - как бы в своей критической секции. Но это избавляет лишь от части проблем, не от всех.

И, кроме того, https://habrahabr.ru/post/195574/
Цитата:
По умолчанию Go работает на одном потоке, используя свой шедулер и асинхронные вызовы. (У программиста создается ощущение многопоточности и параллельности.) В этом случае каналы работаю очень быстро. Но если указать Go использовать 2 и больше потока, то Go начинает использовать блокировки и производительность каналов может падать. Не хочется себя ограничивать в использовании каналов. Тем более, большинство сторонних библиотек при каждом удобном случае используют каналы. Поэтому часто эффективно запускать Go с одним потоком, как это сделано по умолчанию.

Т.е., проблему нескольких тредов нужно сначала включить, чтобы она начала работать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Goroutines и гонки
СообщениеДобавлено: Вторник, 13 Март, 2018 17:41 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 8954
Откуда: Россия, Орёл
Так ошибочный сам подход, что параметр "число потоков" является ручкой настройки.

Он влияет на код.

Примите допущение, что у вас в адресном пространстве не более 1 аппаратного треда (при многих сопрограммах) - и вам не надо думать о повторной входимости и мониторах/критических секциях для каждого объекта.

А если нужно думать - то, вводя эти блокирующие механизмы, вы и получите очень быстро дидлоки...

Вот на последнем Дне Оберона это сначала разбирал Дмитрий Дагаев, потом я рассказывал в "Практических аспектах..." о нашей реализации сопрограмм.
http://oberoncore.ru/oberonday/2017
И, кстати, принцип диалектического развития технических систем: сначала запрети что-то, а потом разреши на новом уровне...
Я там рассказываю про то, как ограниченная мультитредовость в общем пространстве далее вводится, для взаимодействия с внешним миром и для изолированных алгоритмов. Но без блокировок, внезапно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Goroutines и гонки
СообщениеДобавлено: Вторник, 13 Март, 2018 19:36 

Зарегистрирован: Среда, 31 Январь, 2018 19:54
Сообщения: 25
ilovb писал(а):
Миром правят OpenMP, MPI и CUDA если кто до сих пор не в курсе. И все это нормально пашет только на плюсах. И так будет еще *цать лет.

Это реально и на других языках. PascalABC.NET (Open source, написан на с#) использует некоторые директивы OpenMP - первое упоминание OpenMP в 2011 году. Возможно, с тех пор было развитие. Тестовые примеры программ на паскале прилагаются в установке - ускорение на некоторых порядка 20% . В одном из примеров замедление в 2 раза - возможно ошибка в реализации, пока не разбирался.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Goroutines и гонки
СообщениеДобавлено: Вторник, 13 Март, 2018 23:48 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 125
Илья Ермаков писал(а):
Примите допущение, что у вас в адресном пространстве не более 1 аппаратного треда (при многих сопрограммах) - и вам не надо думать о повторной входимости и мониторах/критических секциях для каждого объекта.

http://wiki.tcl.tk/1255 - есть вот такая статья, которая показывает подобные проблемы в tcl/tk. Там есть очередь сообщений (на самом деле их две, но это не суть важно), а каждый обработчик события обычно обрабатывается до завершения. Пока он обрабатывается, другое событие не может начаться. Т.е. та самая модель естественной критической секции. Но есть и update (аналог yield). Если мы его вызвали, то другие события могут обработаться посреди нашей "естественной критической секции", т.е. секция сломалась. Для асинхронщины это значит, что мы должны про любую процедуру знать, вызывает ли она yield. И, если вызывает, то у нас произошёл разрыв критической секции на как минимум две - до вызова этой процедуры и после. В случае tcl/tk неудачно сложилось так, что это узнать иногда сложно, иногда нельзя.

Я пришёл к выводу, что обойтись без явного управления параллельностью невозможно. В пьесе должен быть думающий сценарист, который определяет, кто и в каком порядке выходит на сцену. Без него скоординированная работа труппы не получится. Это свойство не какой-то модели параллельности, а параллельности как таковой.

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

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

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

Код действительно зависит от числа тредов. Если мы хотим оптимизации, то мы можем разрешить устанавливать число тредов как флаг компиляции и запретить менять его для уже готовой программы. Тогда особых потерь нет - кому нравятся корутины и один тред - просто поставь флаг. Как сделано в голанге - я не знаю. Если у них нет защиты от включения второго треда произвольным кодом - тогда да, проблема у них есть. Но она наверняка решается очень маленьким (на несколько строк) патчем к рантайму, после которого ручка просто перестаёт работать :)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 16 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2018, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB