.
ainu
В кишках - синхронная (конкуррентная). А вот код - асинхронный. С точки зрения программиста ты можешь отправить программу грузить файл, а пока он это делает - заняться другими делами
Yura
Vladislav
/voteban
ainu
только важно помнить, это не система реального времени. Статику через Go лучше не отдавать - nginx отдаст её при любом запросе, Go может например сборщик включить или ещё что там у себя делать
ainu
например не открыть сокет во время работы сборщика
Zver
/voteban
Я посмотреть порно не успел. 😔
arkady
/voteban
Yura
Инновационными в Го являются две вещи: резиновый стэк для компилируемого языка, и прозрачный фолбэк на трэды для блокирующих сисколов (именно фолбэк для долгих сисколов, а не реализация через тредпул всех блокирующих сисколов). Эти две вещи не были применены в массовых продуктах до Go.
Больше особой навизны нет.
Ну да, еще каналы :-)
Vladislav
Maxim
Yura
ainu
Yura
Maxim
Chebyrash
Chebyrash
Есть желающие?)
Billyfbrain
к слову mpeg-dash есть ли что-то готовое для нарезки под го, или только биндинги сишных либ?
Yura
Igor
Billyfbrain
Timur
Yura
Ого. Интересно послушать. А проводились замеры, реально получился выйгрыш в раздаче статики по сравнение с Nginx или тут вопрос скорей удобства написания сервиса, что всё в одном месте?
Да, вопрос был в гибкости:
- во-первых, на момент переписывания nginx все еще читал с диска в главном потоке воркера, и это было серьезной проблемой, т.к. все воркеры в итоге упирались в диск с популярным файлом, а остальные диски курили. Go же просто создает новый тред под капотом. Вы когда-нибудь видели LA 15000? Я видел.
Сейчас у nginx появились тред-пулы, их можно настраивать на каждый диск.
- во-вторых, nginx хреново кэшировал большие файлы. До Гошки приходилось кэшировать с помощью nodejs, стоящей позади nginx.
Сейчас в nginx появилась кэширование по чанкам. Мы его изначально сделали. (на nodejs - в 2012году).
- в третьих, у nginx не дружило кэширование и нарезка flash mpeg4. Мы сделали нарезку на лету, пока файлвыкачивался еще со стораджа. Не знаю, как сейчас с этим у nginx.
- Ну и, точно так же на лету нарезается mpeg-dash, и сохраняется на диск.
Nikita
Yura
btw, @mcsseifer - Тимур Нурутдинов - тоже принимал активное участие.
Igor
Спасибо за ответ!
🎉
А 'мой круг' мэйлру принадлежит? А то у них сайт лёг.
bebebe
Pawel
Grigoriy
саша
Daniel
там, где можно, он асинхронный
саша
Или какая-то эмуляция асинхронности через нативные треды?
Daniel
коллега, о чем вы спрашиваете?
Daniel
со стороны программера там всегда синхронно, кроме селекта с дефолтом
Daniel
а вот со стороны рантайма возможны варианты
Daniel
в том же линуксе файловое IO не до конца асинхронное. go тут ничего сделать не может
Daniel
еще там, конечно, есть динамическое увеличение тред-пула в случае, если все имеющиеся треды оказались заблокированы на синхронных операциях в ядре
Daniel
кому оно эмулирует асинхронность и зачем?
саша
Вот представьте, что вам надо написать раздатчик файлов. Допустим у вас сотни коннектов, которым надо выкачать по гигу с вашего диска. Разве вы будете заниматься чтением с диска в тех же тредах, где вы обрабатываете коннекты?
Daniel
почему нет?
maxnemoy
Господа, подскажите пожалуйста, есть ли как-то либы для авто-генерации какой-нибудь +- веб морды для апи, чтобы не лазить постоянно во всякие курлы, постмены?
Daniel
а?!
Yura
Так вот я и спрашиваю, мало ли, может го через нативные треды эмулирует асинхронность.
Весь сетевой ввод-вывод асинхронный. Не блокирующие сисколы тредов не порождают, а выполняются в потоке шедулера горутин. Блокирующий сискол, если отработал быстро, тоже не порождает тред. Если же заблокировался на долго, то рантайм создает новый тред и уносит на него шедулер: заблокированная горутина остаётся на этом треде, другие горутины выполняются на новом.
iči
bebebe
maxnemoy
Swagger?
она же вроде только документацию собирает? а я бы хотел именно функционал, или я ошибаюсь?
bebebe
если сделать все прямо, то твой бинарник, который провайдит rest api - по хттп сможет отдавать тот rest который поддерживает
Daniel
это не совсем так
iči
саша
maxnemoy
Daniel
сваггеру надо переопределить обработчики, и тогда будет примерно то, что запросил топикстартер
bebebe
при помощи swagger.io можно захостить прототип своего rest'a и на нем дергать примеры, или сделать fake-api, что бы тестировать клиента
iči
Про го не могу сказать, но на дотнет проекте сваггер дёргал вполне реальные методы
Daniel
коллега
maxnemoy
спасибо всем, пойду в доке пороюсь, может чего получится
Daniel
если вы написали реальные методы - сваггер будет их дергать, только надо объяснить ему, какие куда
Daniel
а если не написали - дефолтный обработчик возвращает "not implemented"
maxnemoy
Daniel
сегодня день вопросов, которые я не понимаю :(
Daniel
у вас есть описание вашего api в формате swagger
Daniel
вы генерите из него серверный код (с помощью go-swagger)
Daniel
получается нечто, что можно собрать и запустить, и даже все endpoints будут обрабатываться
Daniel
но
Daniel
что делать-то по запросу на каждый endpoint вам еще предстоит написать, правда?
iči
У вопрошающего апи написан уже, как я понял