@oop_ru

Страница 342 из 785
Anton
22.09.2017
08:31:44
Я вот реально начал въезжать в корутины только когда сел и написал свой планировщик (да, на PHP). До этого вроде пользуешся - прикольно, а понимания как оно внутри нет

Для тех кто хочет побаловаться с корутинами в PHP стоит начать отсюда: https://nikic.github.io/2012/12/22/Cooperative-multitasking-using-coroutines-in-PHP.html

B плавно перетекать сюда: https://amphp.org/

Maksim
22.09.2017
08:36:24
пхп - не торт

Google
Maksim
22.09.2017
08:36:34
всем добрый день)

Anton
22.09.2017
08:38:28
Тем что могут распределяться по go машинам и выполняться паралельно почти без накладных расходов

Roman
22.09.2017
08:39:06
Anton
22.09.2017
08:39:35
Goтермины (с)

по сути умеют в многоядерность / многопоточность

Sergey
22.09.2017
08:40:55
приведи пример чего-нибудь интересного... ну то есть да, прикольно с канкаренси поработать но....
агрегатор и парсер каких-нибудь апишек, с ограничением по одновременным вызовам, с задержками. вон на megogo тестовое мне нравится. ща найду

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

Roman
22.09.2017
08:41:28
по сути умеют в многоядерность / многопоточность
конкурентность или параллелизм ?

Sergey
22.09.2017
08:41:31
Goтермины (с)
ткни пальцем где "го машина"

Maksim
22.09.2017
08:42:18
Я для себя выбрал в качестве примера агрегатор авиабилетов. Вполне себе юзкейс

Типа миллиона аналогичных сервисов по поиску самых дешёвых вариантов

Sergey
22.09.2017
08:42:55
ну или так

Google
Sergey
22.09.2017
08:43:03
>не прибегая к Thread.sleep вот тут и нужны неблокирующие операции

Anton
22.09.2017
08:45:05
ткни пальцем где "го машина"
Не могу сходу оригинал найти про то как устроен планировщик в го. Кратко на русском тут: https://habrahabr.ru/post/141853/

Sergey
22.09.2017
08:46:06
короче кому влом читать статью го машина == поток

Anton
22.09.2017
08:46:55
конкурентность или параллелизм ?
Хороший вопрос. Насколько я разобрался в Go оно может и так и так :) Могу быть не прав, если есть адепты го - поправьте.

Sergey
22.09.2017
08:46:58
и фиксируется в рантайме

Anton
22.09.2017
08:47:27
Классические корутины конечно только конкурентность

Sergey
22.09.2017
08:47:48
Roman
22.09.2017
08:48:38
мультитаскинг вообще-то
https://habrahabr.ru/company/piter/blog/274569/

Sergey
22.09.2017
08:48:41
мультитаскинг вообще-то
мультитаскинг и конкурентность. Дай определение различий

Sergey
22.09.2017
08:56:50
мультитаскинг и конкурентность. Дай определение различий
в мультитаскинге у тебя на одном ядре может выполняться несколько программ при этом не мешая друг другу. т.е когда в одной таске идет простой или ожидание чего-либо, то шедулер передает исполнение другому таску и тот занимает время CPU в конкуретности нужно хотя бы 2 ядра, чтобы они могли выполняться одновременно в единицу времени. тогда могут появиться рейс кондишены и то при одновременном доступе(конкуретности) вот в go тебе мало нужно париться по поводу волатильности, мутабельности и синхронизациях. там каналы решают почти все проблемы

Roman
22.09.2017
08:58:58
ой

https://habrastorage.org/files/ac1/f18/7d1/ac1f187d1d4b470a9dbad532754ee7f7.png

по моему эта картинка все объясняет

Roman
22.09.2017
09:21:12
оле!

Google
Roman
22.09.2017
09:21:19
так вот вопрос был про go

и go это про конкурентность

Sergey
22.09.2017
09:36:23
конкурентный в моем понимании это когда идет гонка за ресурсами. i/O например.

и процессорное время. В этом плане обычный однопоточный event loop это просто мультиплексирование операций работы с I/O. Для этого не обязательно иметь потоки/процессы дополнительные. Просто в случае с go ты не ограничиваешь себя одним процессом что еще больше дает простора для ресурсов.

в erlang та же тема

Roman
22.09.2017
09:44:22
в erlang та же тема
а в Haskell как?

Sergey
22.09.2017
09:54:04
а в Haskell как?
а в хаскеле есть какие-то подобные примитивы как горутины или микротреды эрланговские?

Roman
22.09.2017
09:54:55
Sergey
22.09.2017
09:55:07
https://wiki.haskell.org/Concurrency#GHC_concurrency_specifics

Roman
22.09.2017
09:55:47
STM Haskell и parallel Haskell

Evgeniy
22.09.2017
10:07:34
о хаскель в ооп чате я все ждал когда же начнется

Sergey
22.09.2017
10:11:24
о хаскель в ооп чате я все ждал когда же начнется
началось где-то на 3-ией день существования этого чата на самом деле

Evgeniy
22.09.2017
10:13:32
я пропустил, но святые срачи ооп vs фп

Arsen
22.09.2017
10:13:36
знатоки, поясните плз, почему переключение горутин такое быстрое?

Sergey
22.09.2017
10:14:08
контекст свитчинг происходит не на уровне операционки а на уровне рантайма языка

Arsen
22.09.2017
10:14:30
вот именно

Sergey
22.09.2017
10:14:32
и от того намного проще и эффективнее

Arsen
22.09.2017
10:14:45
более высокоуровневая операция, по идее

Google
Sergey
22.09.2017
10:14:49
это как "если тебе надо много с памятью работать - пиши свой менеджер памяти а не полагайся на системный"

Arsen
22.09.2017
10:14:51
?

Sergey
22.09.2017
10:15:03
вопрос специализации скорее

Arsen
22.09.2017
10:16:17
http://blog.nindalf.com/how-goroutines-work/ > Goroutines are scheduled cooperatively and when a switch occurs, only 3 registers need to be saved/restored - Program Counter, Stack Pointer and DX. The cost is much lower. почему так?

Sergey
22.09.2017
10:17:01
можешь погуглить что происходит когда диспетчеризацией операционка занимается

Arsen
22.09.2017
10:17:22
мм, за счёт чего достигается такая лёгкость контекста?

Sergey
22.09.2017
10:17:22
и сколько она там всего еще делает

за счет того что реализовано в рантайме языка.

для упрощения, представь что ты делаешь многопоточность в юзерспейсе

а точнее это просто event loop

Arsen
22.09.2017
10:18:47
хм

Sergey
22.09.2017
10:18:49
и ты пишешь свой диспетчер который разруливает кто в каком порядке выполняется

и поскольку ты все делаешь сам - у тебя руки развязаны делать это так как тебе того надо

и ты можешь оптимизировать все что только можно, выкидывая то что тебе не надо

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

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

то есть профит по производительности за счет узкой специализации алгоритмов

Arsen
22.09.2017
10:22:00
я прост не понимаю, почему тогда джава машина не умеет так же? есть какое-то кардинальное различие между горутинами и тредами, которое я не улавливаю? или дело в заведомо невыгодном решение маппить джава тред на ос тред 1:1, которое уже не просто изменить?

спасибо за разжёвывание, стало понятней)

Google
Arsen
22.09.2017
10:25:46
не знал про них, пойду почитаю, спасибо

Sergey
22.09.2017
10:26:52
http://blog.paralleluniverse.co/2016/05/03/skynet-go-quasar/

Страница 342 из 785