@schors
schors
26 Dec 2014

вот такой тоже ещё вопрос. как сделать трансляцию между например websocket и ssh мне понятно например на python. хоть вручную event driven, хоть Twisted (наверное и gevent, но я его не знаю). чем может быть лучше использование golang с его каналами? или ничем?

26 Dec 2014

что искаропки? работать оно как будет? лучше, хуже?

#ovrsao/2 в ответ на /1
26 Dec 2014

schors, нормально оно работает. Обычные блокирующие очереди с буферизацией/без. Почти то же самое что mailbox'ы в эрланге/core.async в кложуре. Единственное что мне советовали - это не гонять слишком мелкие куски данных через них, хотя вроде семплы спокойно гоняю.

#ovrsao/3 в ответ на /2
26 Dec 2014

ничего не понял. я не знаю что такое "обычные блокирующие очереди с буферизацией/без". тем более я не знаю что такое mailboxы в erlnag и core.async даже не знаю что это ;)

#ovrsao/4 в ответ на /3
26 Dec 2014

в том смысле - работает-то оно как? там треды какие, или что?

#ovrsao/5 в ответ на /4
26 Dec 2014

schors, каналы это очереди: с одной стороны заталкиваешь данные, с другой забираешь в том же порядке, всё потокобезопасно

#ovrsao/6 в ответ на /4
26 Dec 2014

на уровне ОС как это реализовано?

#ovrsao/7 в ответ на /6
26 Dec 2014

так. я попробую перезадать вопрос. у меня собственно непонимание вот где. я открыл 10000 сессий ssh например на прокси на Twisted. у меня там один процесс, который значит бегает и раскидывает по 20000 соединениям туда-сюда в той степени дискретности, какую я реализовал сам. а что происходит в Go? я тоже должен помнить, что операции должны стремиться к атомарным, или там таки треды? но если треды, то не сдохнут ли они на 10000?

#ovrsao/9 в ответ на /8
26 Dec 2014

schors, в го нет тредов, есть горутины, которые равномерно распределяются в тредпуле по тредам и автоматически переключаются на асинхронных операциях(сокеты в го по-дефолту асинхронные)

#ovrsao/10 в ответ на /9
26 Dec 2014

вот. это в Go нет тредов. а на уровне ОС горутины - это что?

#ovrsao/11 в ответ на /10
26 Dec 2014

schors, на уровне ос горутины это сопрограммы выполняющиеся на нескольких тредах

#ovrsao/12 в ответ на /11
26 Dec 2014

т.е. таки треды. т.е. резкий скачок 1000 соединений это дело не выдержит. не, не, это ни хорошо, ни плохо. такие "скачки" достаточно особенная штука. т.е. если нет специального смысла в мучении с event driven, то Go. так да?

#ovrsao/13 в ответ на /12
26 Dec 2014

schors, тредов там по-дефолту только ровно сколько ядер у процессора, больше он не создаст

#ovrsao/14 в ответ на /13
26 Dec 2014

Kerrigan, можешь еще больше ограничить, если так хочется

#ovrsao/15 в ответ на /14
26 Dec 2014

так стоп. я создал 10000 соединений, которые соединились с другой стороны с 10000 чем-то. это 10000 конкретных функций. они как делят-то всё между собой? варианты - функция равно процесс, функция равно тред, функция выполняет атомарные операции после чего возвращает управление диспетчеру, который вызывает там по своим причинам какую-либо ещё ожидающую функцию - event driven. а тут я чего-то не могу положить ни в одну корзину

#ovrsao/16 в ответ на /14
26 Dec 2014

schors, функция равно сопрограмма https://ru.wikipedia.org/wiki/Сопрограмма

  1. ты создал кучу соединений
  2. соединения стали подключаться
  3. пока они подключаются - сокет ждет
  4. пока сопрограмма ждет - можно переключиться на следующую
  5. все подключились
  6. ищем среди сопрограмм первые N(число тредов) готовых
  7. выполняем их до следующего неблокирующего действия(чтение/запись/етц)
    8 Goto 6
#ovrsao/17 в ответ на /16
26 Dec 2014

т.е. создав в N=количество ядер сопрограмм бесконечные циклы, я всё лочу? или создав мощную обработку (потоковое пережатие видео) всё начинает "чихать"? т.е. следует помнить об этом и избегать?

#ovrsao/18 в ответ на /17
26 Dec 2014

на обычных сокетах ничего делать не надо, они сами переключаются

#ovrsao/20 в ответ на /19
26 Dec 2014

о, супер. ты оказал мне неоцинимую услугу. я буду понимать в каком смысле всё это воспринимать. спасибо

#ovrsao/21 в ответ на /19
26 Dec 2014

кстати пишут, что начиная с 1.2 можно уже не дергать ничего - оно будет само переключаться

#ovrsao/22 в ответ на /19
26 Dec 2014

типа при компиляции транслятор навставляет?

#ovrsao/24 в ответ на /22
26 Dec 2014

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

#ovrsao/25 в ответ на /23

Добавить пост

Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
Для форматирования текста используется Markdown.