
Vadim
08.09.2017
13:04:31
ШТОА
а для кого же мы с @moteus пилили Lua-cURL?!?!?

Snusmumriken
08.09.2017
13:05:06
ШТОА
Они распространены больше всех.
Курл - узкооспециализирован для загрузки файлов.
Не для "произвольной сетевой связи"

Vadim
08.09.2017
13:05:18
нет

Google

Vadim
08.09.2017
13:05:22
для загрузки URL
он умеет разные протоколы
и он не слишком низкоуровневый в отличие от работы с голыми сокетами

Snusmumriken
08.09.2017
13:05:58
Курл молодец, это да. Но специализация - не приём-передача а приём. Причём, как правило - файлы.

Aydar
08.09.2017
13:06:03
Я вижу вам только тему дай и сразу срач

Рома
08.09.2017
13:06:21
В resty сокеты от nginx, там все специальное неблокирующее.
Ещё пример luvit, где все асинхронное и luasec тоже не катит.
Да я не о том, никогда не понимал, вместо нескольких строчек кода для запроса на любой сервис люди тянут гемы, роки, либы, работают почему-то не напрямую с сервисами, а через эти либы

Alexey
08.09.2017
13:06:22
там есть curl_send/curl_recv
Я думаю добавить в биндинг

Snusmumriken
08.09.2017
13:06:49
Почему luasec не катит в "асинхронном" luivit?

Рома
08.09.2017
13:06:59
потому что он синхронный?

Alexey
08.09.2017
13:07:20
тогда можно будет, например, устанавливать TLS соединение с помощью cURL
А далее читать и писать поток байт

Snusmumriken
08.09.2017
13:08:06
потому что он синхронный?
Там такая же асинхронность как у ноды. То есть, как бы асинхронность, но на самом деле нет.
Это первое. Второе - luasec можно сделать асинхронным без особых проблем : )

Alexey
08.09.2017
13:09:20
luvit реализовал tls сам.
Ну и асинхронность там настоящая :)

Snusmumriken
08.09.2017
13:10:02
Настоящая многопоточка?
Во, а какая модель памяти? Отдельные виртуальные машины под тред?

Google

Рома
08.09.2017
13:11:27
Я пока далек от низкоуровневого, надеюсь, скоро буду шарить. Как мне кажется, для синхронного сокета нужно просто сделать запрос. А для асинхронного нужно сказать какой-то системной штуке, вроде livub, что я хочу сделать запрос, а ты меня потом дернешь. И когда запрос прошел, libuv открывает определенное вхождение виртуальной машины, как-то так

Alexey
08.09.2017
13:11:51
При чем тут многопоточность?
Но libuv использует пул потоков и очереди,
но клиентский код однопоточный, что не мешает ему быть асинхронным

Snusmumriken
08.09.2017
13:12:15
Пул потоков - каких?
Потоки - это что, в данном случае?

Alexey
08.09.2017
13:12:50
https://github.com/libuv/libuv/blob/v1.x/src/threadpool.c

Philipp
08.09.2017
13:12:53
Там документация лучше))

Vadim
08.09.2017
13:13:06
сочувствую :)

Philipp
08.09.2017
13:13:22
сочувствую :)
И получилось всё замечательно, и наверняка работает везде)))

The Dude
08.09.2017
13:13:37

Alexey
08.09.2017
13:13:55
Под windows например используются порты завершения
не надо путать асинхронность и многопоточность. Это разные вещи

Рома
08.09.2017
13:16:09
Никогда не понимал велосипедостроителей.
Чувак, есть за и против. За: вроде как меньше кода писать. Против: эта либа может измениться в любой момент, потом переписывать, это черный ящик, запросто может работать не как ожидаешь, делать что-то не как хочешь, в крайнем случае может отвалиться. И если можно вместо этого самому написать простой запрос, то никаких преимуществ.

The Dude
08.09.2017
13:17:00


Snusmumriken
08.09.2017
13:17:22
Потому что я знаю довольно много реализаций параллелизма.
1. Нода - бесконечный цикл с проходом по списку активных событий и дёрганье колбеков.
Асинхронность там достигается нулевым таймаутом на все потенциально блокирующие действия, и переход к следующему процессу, пока всё таки что-то не придёт в буфер. Пример подобной асинхронщины с luasocket от самого Роберто Иерузалимски: https://www.lua.org/pil/9.4.html
Ну, труЪ-многопоточкой тут не пахнет, просто как бы несколько дел одновременно.
2. Треды - как отдельные виртуальные машины под каждый процесс, тут можно хоть блокировать хоть не блокировать - всё одно. Память, как правило, разделённая. Я предпочитаю такие треды. У меня где-то есть аналог ноды многопоточный, с той же сутью (lanes).
Так вот. Сокеты можно сделать асинхронными с комплектом: "оболочка + колбеки на входящую лабуду". Это обычный подход. Луасек - туда же.


Рома
08.09.2017
13:18:38
Ага, велосипедостроитель.
Просто не работал ты на legacy проектах, с кучей зависимостей на устаревшие версии либ, где ничего нельзя обновлять, ибо все отвалится, а менять нужно, и приходиться монкипатчить это старье.

The Dude
08.09.2017
13:18:56

Snusmumriken
08.09.2017
13:19:26

Alexey
08.09.2017
13:27:13
node.js использет libuv для IO
В общем да, но не совсем.
Там весь IO происходит в отдельных потоках.
Например в Windows это реализовано на уровне OS,
и далее по завершению операции результат передается
в клиентский поток.
Есть другая модель когда клентский поток оповещается
только о том что необходимо произвесть операцию.
На счет многопоточности. Мне нравится модел share nothing.
Просто запускаешь поток (с начальными параметрами) и далее
использешь некий канал связи.
Lanes делает примерно тоже, только проблема что его
каналы нельзя привязать ни к какой модели IO, крому как polling

Snusmumriken
08.09.2017
13:50:56
В ноде нет ОС-потоков :<
Это легко проверяется диспетчером задач, с отображением активных потоков.
Нода однопоточна.
IO там происходит в том же потоке что и основной код. Просто колбеки.
Посмотри пример от роберто, который в моём посте. Там корутины, но и без корутин можно всё то же самое.

Google

Saphire
08.09.2017
13:51:34

Snusmumriken
08.09.2017
13:53:22
https://habrahabr.ru/post/150788/
Судя по статье, многопоточность - только в отдельном модуле cluster, который, как я понимаю, автоматически запускает несколько копий ноды и выдаёт им задачки. Вне этого - однопоточка с эвентлупом.
Но сокеты умеют быть неблокирующими => ничто не мешает использовать luasocket/luasec в luvit'е.
Что и требовалось доказать.

Vadim
08.09.2017
13:59:03

Snusmumriken
08.09.2017
13:59:59

Vadim
08.09.2017
14:02:04
а у них - cluster ;)

Aydar
08.09.2017
14:04:56
Можно ли в lua сделать gui если нет многопоточности?

Vadim
08.09.2017
14:06:59
не так
в lua нет многопоточности ИЗ КОРОБКИ
как нет и gui ИЗ КОРОБКИ

Aydar
08.09.2017
14:07:23
А то есть из c можно?

Vadim
08.09.2017
14:07:28
сама суть Lua в том, чтобы было только самое необходимое

Vadim
08.09.2017
14:07:52
поэтому ты вполне можешь прикрутить многопоточность любым из доступных способов и делать гуй в отдельном потоке

Dika
08.09.2017
14:08:10

Aydar
08.09.2017
14:08:28
Была идея сделать биндинг к nuklear

Saphire
08.09.2017
14:08:34
Вместо того, что бы делать нормальный гуй через QT, они тупо обещали браузер...

Alexey
08.09.2017
14:14:21
ОС выполняет ввод.вывод в своих потоках. (там где это поддерживается)
Я использовал IUP

Google

Snusmumriken
08.09.2017
14:44:47
Вот тут смотрим гуишку. Она, правда, хочет кучи либ, но зато много что умеет:
https://luapower.com/
Есть ещё биндинги qt/tcl.

Aydar
08.09.2017
14:47:18

Snusmumriken
08.09.2017
14:48:40
А что ты хочешь? : )
Если очень хочется - можно в opengl/sdl замутить ТАКОЙ гуй, который и не снился никому : )

Aydar
08.09.2017
14:49:09

Чай
08.09.2017
14:49:13
Сейчас Electron жирно. Qt ругать за жирноту уже не в моде.

Aydar
08.09.2017
14:49:39

Admin
ERROR: S client not available

Dika
08.09.2017
14:49:48

Чай
08.09.2017
14:50:05
*для электрона
Очень много.

Dika
08.09.2017
14:50:24

Aydar
08.09.2017
14:50:33

Snusmumriken
08.09.2017
14:53:47

Aydar
08.09.2017
14:54:57

Snusmumriken
08.09.2017
14:56:27
Смотри какой пафосный
https://github.com/SSYGEN/yaoui

Aydar
08.09.2017
14:57:06

Vadim
08.09.2017
14:57:15

Snusmumriken
08.09.2017
14:57:55

Google

Рома
08.09.2017
14:59:17
Кстати, интересный момент! Слак - удивительно тяжелый мессенджер, как раз разбивается на несколько процессов, каждый проект - отдельный процесс, главный процесс и ещё один процесс. Благодаря сему гениальному разбиению, мессенджер способен сжирать 1.5гб оперативки.
А вдруг это значит, что много процессов это плохо? И нодин подход с циклом в одном потоке более выгодный?

Vadim
08.09.2017
15:00:17
на самом деле - говно полностью грузить весь электрон в каждом потоке
если держать в потоках только нужные данные, то можно жрать меньше оперативки
зато если упадёт один поток - остальные могут остаться жить

Рома
08.09.2017
15:02:49
Вон у плазмы один поток и она не падает!

Aydar
08.09.2017
15:06:50

Vadim
08.09.2017
15:07:30
ну, это конкретно электрон
а я про модель многопоточность vs однопоточность
:)

Aydar
08.09.2017
15:08:14
Тут ветка про js и многопоточность?

Vadim
08.09.2017
15:08:53
вообще, тут чатик про Lua :)

Aydar
08.09.2017
15:09:28
А если я вдруг соберусь сделать gui на sdl его выкладывать? Или вы qt довольны?
А то мало ли вы тут все крутые. Для вас все либы велосипеды

Vadim
08.09.2017
15:19:11
как по мне:
1) кути норм
2) делать гуй для скриптов на интерпретируемых языках - кака
3) использовать sdl для ОС-гуя, а не для игорей - СТРАННО

Aydar
08.09.2017
15:20:02

Vadim
08.09.2017
15:20:59
его придумали для облегчения портирования с венды ?

Aydar
08.09.2017
15:22:06

Vadim
08.09.2017
15:22:34
кроссплатформенность - это когда сразу кроссплатформенно
те же кути