Daniel
коллега Николай, а вы логи-то пишете? по логам нельзя понять, что там у вас встает колом?
Daniel
а транспорт настраиваете? максимальное количество коннектов одновременны к одному серверу, и все вот это вот?
Nikolay Markov
коллега Николай, а вы логи-то пишете? по логам нельзя понять, что там у вас встает колом?
писал, но не особо помогло. Может зависнуть на разных урлах, которые отдельно проходят
Daniel
что такое зависнуть?
Daniel
зависнуть там ничего не может
Daniel
может ждать отправки или получения данных
Nikolay Markov
может ждать отправки или получения данных
я выше написал, один из тредов ожидает на epoll_pwait крайне долго, и таймаут для http-клиента не помогает
Daniel
еполл - это вы очень глубоко отправились
Daniel
транспорт вы настраиваете?
Daniel
конечно она пцустая - у вас же приложение не делает ничего
Nikolay Markov
транспорт вы настраиваете?
я ему выставляю InsecureSkipVerify: true
Nikolay Markov
больше ничего
Daniel
это TLS
Nikolay Markov
конечно она пцустая - у вас же приложение не делает ничего
да, это и напрягает, что таймаут не соблюдается
Daniel
ну вот посмотрите, сколько всего полезного можно настроить: https://golang.org/pkg/net/http/?#Transport
Roman
Слушайте, а почему собственно не иметь возможность запускать разные goroutine'ы в разных runtime'ах с отдельным scheduler'ом?
Roman
это конечно повысит memory-footprint, но для time-critical applications это было бы вполне полезно
Roman
на одном рантайме 100.000 горутин занимаются всяким I/O, на другом рантайме 12 горутин занимаются обработкой time-critical заданий
Daniel
это все зачем?
Roman
это все зачем?
да если даже про тот-же рендеринг говорить.. чтоб 100к горутин которые занимаются всяким I/O не крали время у тех горутин, которые занимаются time-critical заданиями как рендеринг на экран..
Daniel
коллега, нет никакого рендеринга
.
Эта идея может быть реализована в виде приоритетов для горутин
Daniel
откуда у горутин приоритеты
саша
на одном рантайме 100.000 горутин занимаются всяким I/O, на другом рантайме 12 горутин занимаются обработкой time-critical заданий
А зачем писать критичное ко времени на языке 1) с GC 2) с плохо оптимизирующим компилятором?
Daniel
ладно, пойду еще на 8 часов замьючу чатик
.
откуда у горутин приоритеты
Читал об этой идее в доке о дизайне планировщика в версии 1.1
Daniel
в общем и целом идея сдохла (и хорошо)
Daniel
горутины хорошо работают в ситуации, когда у нас есть запас по процессору.
Roman
коллега, нет никакого рендеринга
это чисто пример, я не говорю что нам надо обязательно рендерить на Go))) просто collective concurrency это хорошо для массовой параллельности аля API-server. но для time-critical concurrency это ужасно.. если у нас 4 горутины играют роль DSP (signal processing) и пораждают дополнительные горутины для обработки асинхронных тасков, то растущее колво дополнительных горутин будет отрицательно влиять на точность работы первых 4, они будут красть у тех время. Т.е. на данный момент Go совершенно не применим для time-critical + massively parallel, что можно бы было изменить приоритетностью определённых горутин поместив их в некие "work groups"
Daniel
а когда запаса по процессору нет - хорошо не будет, с приоритетами или без
Daniel
короче
Daniel
хотите меньше latency - добавьте ядер
Daniel
а приоритеты для горутин - это смешно
Roman
А зачем писать критичное ко времени на языке 1) с GC 2) с плохо оптимизирующим компилятором?
я абсолютно согласен что лучше просто взять C++ / Rust и не париться! Но тем не менее размышляю над тем как оправдать титул "general purpose programming language", поскольку на Go гораздо легче писать чем на C++ / Rust С гошным GC в принципе можно жить поскольку он оптимизирован не на throughput а на latency, главное мусора не создавать и всё будет окей.
Anonymous
для SDL2 рендеринга делаю 15 милисекундный слип , итог 30 fps
Roman
а приоритеты для горутин - это смешно
скорее не приоритеты а work-group'ы)
Daniel
еще смешнее
Roman
я фантазирую))
Roman
выходные же)
.
Вон Си++ метил в эту область
.
Удалось?)
.
Каждой задаче свой инструмент
Roman
Удалось?)
вполне, на нём можно что угодно написать (насколько это разумно это уже другой вопрос, главное что можно) 3D rendering, GUIs, APIs, DSPs, drivers, an operating systems kernel (maybe?)
Roman
Кто-то и на C умудряется все что угодно написать. Но нам то это зачем?
суть была в том, что при титуле "general purpose" - Go для некоторых задач применять просто незовможно, не решает задачу, поэтому скорее не general purpose
.
Так что не получается нормально писать на Го?
.
Чем он не general purpose
Roman
написать то можно, но работать будет так-себе
Anonymous
любая time-critical задача
помещаете в рутину обьявляете переменные заранее ,никаких вызовов функций, не давайте пищи Гколлектору
Nikolay Markov
а для каких задач НЕВОЗМОЖНО(если не системные)?
например, задачи с периодическими тасками, критичными по времени
Roman
помещаете в рутину обьявляете переменные заранее ,никаких вызовов функций, не давайте пищи Гколлектору
это если изолировать бинарь только под 1 задачу.. как только начинается работа с I/O и подобное - всё рушится из-за collective concurrency
.
Так можно отключить GC, если его задержки мешают
Nikolay Markov
дело не в gc, дело в отсутствии гарантий по времени
Roman
Так можно отключить GC, если его задержки мешают
в продакшне отключить GC в языке который был designed for GC?))
Roman
дело не в gc, дело в отсутствии гарантий по времени
верно, это не страшно если у вас 10k одновременных клиентов и один запрос можно затянуть на секунду и это терпимо..
Nikolay Markov
Если у вас такая задача то видимо да
если задача, для которой критичны задержки gc - то го не нужен
.
если задача, для которой критичны задержки gc - то го не нужен
Само собой такие задачи лучше писать на других яп
Roman
ну да, к сожалению.. я за "the right tool for the right job", но порой это жуткий context switch, другие библиотеки, другие парадигмы, другие инструменты, сильно понижает продуктивность поэтому зачастую языки использую не по назначению, чисто ради сохранения продуктивности и воизбежание просадки
Nikolay Markov
хотя я до сих пор хочу втащить клавиатурой тем, кто приводит аргумент "зато весь стек на одном языке"
Roman
хотя я до сих пор хочу втащить клавиатурой тем, кто приводит аргумент "зато весь стек на одном языке"
для очень маленьких проектов это лучше, чем тащить Go на бэкэнд, серьёзно, потому-что: продуктивность. но как только всё это начинает расти - можно спокойно выбрасывать Node.js сервер и писать backend на Go.
Nikolay Markov
с куда более взрослой экосистемой
Roman
для очень маленьких проектов есть питон и какой-нибудь Flask/Bottle
так зачем тебе питон, если JavaScript тебе роднее да ещё и V8 зачастую быстрее питонского runtime'а
Nikolay Markov
так зачем тебе питон, если JavaScript тебе роднее да ещё и V8 зачастую быстрее питонского runtime'а
затем, что на питоне проект займет несколько строк, будет иметь нормальный орм и стабильные пакеты, и все это при минимуме сторонних зависимостей
Roman
А если не роднее
мы говорили про "1 language for both stacks"
Oleh
Ну лан