@dlangru

Страница 90 из 719
Pavel
21.10.2016
15:32:20
А как работает event loop в vibe.d? Там через генераторы и yield ?

Если да, то можно через это и сделать

Grigirii
21.10.2016
15:32:43
там в основе всегда лежит что-то системное

libevent обычно

Google
Dmitry
21.10.2016
15:34:10
генераторы это что? Это https://dlang.org/library/std/concurrency/generator.html ?

Pavel
21.10.2016
15:35:31
да это

Oleg
21.10.2016
15:45:37
А где бы почитать об этом? А то мне было бы очень полезно приобрести такой "странный навык". Не то, чтобы я реально стал на нём руками кодить, но вот кое-что оттранслировать нужно (а то сейчас в Си транслирую и компилю, что мне очень не нравится).
Компилируешь Си с флагом emit bitcode и изучаешь, только еще флаг есть чтобы текст выводил вместо бинарника, ипользуй режимы O0 О2 и О3 чтобы оценить разницу (разный биткод выходит, О1 безпонтовый), и отдельно флаг mem2reg при О0 чтобы наблюдать регистровую форму вместо стековой Во вторых, читай демки/тутор по Kaleidoscope В третьих на хабре была отличная статья по IL

Компилируешь Си с флагом emit bitcode и изучаешь, только еще флаг есть чтобы текст выводил вместо бинарника, ипользуй режимы O0 О2 и О3 чтобы оценить разницу (разный биткод выходит, О1 безпонтовый), и отдельно флаг mem2reg при О0 чтобы наблюдать регистровую форму вместо стековой Во вторых, читай демки/тутор по Kaleidoscope В третьих на хабре была отличная статья по IL
Если транспилишь, то метаданные не пиши (вообще) это все LLVM сам может вывести, главное базовые инструкции чтение/запись и регистры выводи и константы. В opt загоняешь с O3, если только оптимизацию хочешь. Иначе прямо в clang загоняй как есть, с расширением .ll, как будто обычный Си, можешь прямо смешивать модули на си и ll будто это один язык

Dmitry
21.10.2016
15:54:34
А зачем мне промежуточный код изучать для понимания сути работы even loop ?

Grigirii
21.10.2016
15:55:00
кажется это был ответ не про event loop

Dmitry
21.10.2016
15:55:16
а...

Oleg
21.10.2016
16:11:28
а вот где грань? Это все только опытным путем делается? типа "тут мы будем считать, значит лучше поток создать"?
В самом эвент лупе, лучше вообще ничего трудоемкого не делать. Потому что любой затык это простой всего эвент лупа. В высоконагруженной системе лучше наверное чтото другое применять.

А так то луп прикольный

Особенно с генераторами/await

Без эвейта лучше тоже не тыкать ))

Google
Pavel
21.10.2016
16:12:49
в луп надо пихать все что касается IO операций

Oleg
21.10.2016
16:12:50
(Я кодил на nodejs если что)

Pavel
21.10.2016
16:13:01
чтение/запись в файлы, пайпы, сокеты и т.д.

Oleg
21.10.2016
16:13:05
Pavel
21.10.2016
16:13:27
А если не IO - выделять под это дело отдельный процесс и общаться с ним по IPC

Ну или поток. Но потоки мне не очень нравятся.

Oleg
21.10.2016
16:14:34
Или паралелить все подряд как в Go или оптимизировать простои до усёру

Pavel
21.10.2016
16:14:55
А в go же вроде потоки тоже рождаются? Или как там это решено?

Oleg
21.10.2016
16:15:07
Для D есть зеленые треды, можно заюзать

Pavel
21.10.2016
16:15:38
А чем они отличаются от обычных корутин? Разве это не одно и то же?

Oleg
21.10.2016
16:15:43
Зеленые треды
Дешевые псевдо-тредо-очереди

Pavel
21.10.2016
16:15:46
Или от обычных тредов

Oleg
21.10.2016
16:16:10
В Го у тебя физически по несколько реальных тредов на ядро проца

А внутри тредов очереди

Тоесть ты НЕ создаешь РЕАЛЬНЫЙ тред на коннект

В итоге иллюзия многопоточноости сохраняется и шедулер потоков не загружен

Pavel
21.10.2016
16:17:10
Но если например ты в каждой обработке делаешь sleep(10), то в каком треде все это будет выполняться?

Pavel
21.10.2016
16:18:03
Что значит нехрен? Мы же про теоретическую общность рассуждаем

Google
Oleg
21.10.2016
16:18:19
При sleep псевдо-поток освободит физический поток чтобы он другой псевдо-поток крутил

Что значит нехрен? Мы же про теоретическую общность рассуждаем
Ну физически слипать потоки ты точно не будешь,

Pavel
21.10.2016
16:19:04
Это конкретно особенность реализации sleep или в целом ресурсоемких операций?

Oleg
21.10.2016
16:19:21
Ну физически слипать потоки ты точно не будешь,
это заставит заглохнуть все нахрен и все

Pavel
21.10.2016
16:19:40
Ну да, поэтому я и спрашиваю, как эта проблема решена в го

Oleg
21.10.2016
16:19:59
Это конкретно особенность реализации sleep или в целом ресурсоемких операций?
Зависит от реализации sleep, она будет специальной под шедулер

Pavel
21.10.2016
16:20:02
Если начинает появляться много блокирующих задач, го начинает плодить физические потоки?

Oleg
21.10.2016
16:20:16
Ну елки там же просто

У тебя ядер проца сколько? Тысяча?

Pavel
21.10.2016
16:20:50
8

Oleg
21.10.2016
16:20:55
Ты физически тысячей потоков ничего не посчитаешь

Oleg
21.10.2016
16:21:17
Все упрется в постоянное пернключение контекстов и все

В Го это решили так

Давайте сделаем физических потоков по числу ядер

А внутри потоков будем считать ПОСЛЕДОВАТЕЛЬНО

Тоесть:

Ядро 1: А Затем б затем в Ядро 2: х затем y затем z И так далее

Если поток тупит то тупит ТОЛЬКО один из реальных потоков

Pavel
21.10.2016
16:23:33
Я понял. Но вопрос остается. Вот мы породили 8 потоков и они работают. На каждом потоке по 10 горутин например крутятся.

Google
Oleg
21.10.2016
16:23:45
Если запас потоков исчерпан то тебя просто увольняют с работы

Pavel
21.10.2016
16:24:20
Вдруг одна горутина делает очень блокирующий вызов, и стопорит весь поток. го перекидывает 9 соседних горутин на другие потоки.

Pavel
21.10.2016
16:24:38
:)

Ответ прикольный

Но как тогда вообще считать вычисления на го?

Oleg
21.10.2016
16:25:25
В отдельных физических потоках

Oleg
21.10.2016
16:25:36
Не трогая гошный шедулер

Pavel
21.10.2016
16:25:44
понял

Admin
ERROR: S client not available

Oleg
21.10.2016
16:26:05
Но ведь никто не узнает
Дааа! Упавший сервер никто не заметит

Pavel
21.10.2016
16:26:33
ну короче примерно то что я и насоветовал вначале - все IO операции суем в асинхронную обработку, а тяжеловесные выносим в отдельные потоки либо процессы

Pavel
21.10.2016
16:28:07
Дааа! Упавший сервер никто не заметит
И ладно бы если бы за такое сразу можно было уволить. Но ведь бывает же что ты крутишь го программу которую написал другой человек, живущий за 5000км от тебя, и он не работает в вашей компании. И его не уволишь, что бы ни случилось.

Да, но для D же есть горутины
А горутины разве не через event loop работают?

И вроде Goroutine это термин только для go, а у всех остальных Coroutine

Oleg
21.10.2016
16:30:17
А горутины разве не через event loop работают?
Не, ну в рутинах же суть в потоке-на-соединение что формально значит однопоточное исполнение, не прыгая через коллбеки эвент лупа

Google
Oleg
21.10.2016
16:30:56
Для веба выбирать чтото кроме Го ну не знаю, странно

Разве что по личным предпочтениям)

Just
21.10.2016
16:43:22
Для веба выбирать чтото кроме Го ну не знаю, странно
го настолько харош для веба или это ирония?

Oleg
21.10.2016
16:43:38
Я на Го не кодил, но сообщество огромное, проблемы все порешаны, библиотек дофига, концепции встроены в язык

Peter
21.10.2016
16:44:34
го настолько харош для веба или это ирония?
и даже для неочень сложных консольных утилит он норм

Just
21.10.2016
16:44:50
я просто не шарю, но не слишал раньше, что он прям так хорош

и кстати, как использовать sort из std.algorithm.sorting вместо системного?

а хотя я его ниже импортировал и использовал. но все равно, как импортировать так, что бы переопределить одноименную функцию, есть ли что типа import modul as md , как в питоне? что бы потом md.func

Oleg
21.10.2016
16:49:10


alias

Just
21.10.2016
16:49:42
alias
ага, вот оно как, збс, спасибо

Pavel
21.10.2016
17:08:30
го настолько харош для веба или это ирония?
Ну для хайлоада хорошо, вот только он не так часто нужен как я раньше думал

Больше проблем обычно с бизнес-логикой и выборками данных

Oleg
21.10.2016
17:13:26
Pavel
21.10.2016
17:14:38
Да, проблемы на более высоких уровнях абстракций

Если на го ты пишешь, думаешь о производительности, выделении памяти, горутинах, потоках. То в случае с типичным веб проектом приходится думать о доменной области RBAC, Oauth авторизации, ORM и т.д.

Pavel
21.10.2016
17:20:03
Там нет такого богатого набора как в интерпретируемых языках

Oleg
21.10.2016
17:21:00
А чтото про Dart слышно?

Pavel
21.10.2016
17:21:10
вроде глохнет он

Страница 90 из 719