• Вся правда о linux epoll
    0
    Может пример у вас завался для лучшего понимания?
  • Вся правда о linux epoll
    –4
    Нет я имел ввиду вот это lwn.net/Articles/336255

    По поводу PVS ничего сказать не могу я не интересуюсь программированием под Windows и проприетарными продуктами.
  • Вся правда о linux epoll
    0
    Я вас не до конца понял — «API epoll — thread safe» это в каком смысле?

    >> а вот симулировать поведение poll можно и в level-triggered с помощью EPOLLONESHOT.
    Наверное вы имели ввиду в edge-triggered + EPOLLONESHOT + epoll_mod. Поведение epoll в level-triggered изначально проектировалось с совместимостью с поведением select/poll.

    >> При этом вы не обязаны передавать и самостоятельно формировать массив сокетов для каждого epoll_wait, вместо этого вы подсовываете в epoll_wait массив длинной в 1000 элементов. И если они все 1000 одновременно активны, или даже 2000 активны, вы получите порцию не превышающую событий для 1000 дескрипторов за раз.
    >> 3. Обработав эту порцию и с использованием EPOLLONESHOT, вы в следующую итерацию опять получите не более 1000 событий.

    Вообще говоря вы получите не больше чем maxevents, указанных при вызове в epoll_wait (но об этом написано в man), я не понял при чем тут именно EPOLLONESHOT? Или вы имеете ввиду, что мы получих 1000 других событий если они требуют обработки?

  • select / poll / epoll: практическая разница
    0
    Я предлагаю не разводить здесь простыню (уже очень неудобно читать стало). Я сейчас пишу статью (с вашей подачи кстати) — в чем я вижу отличия и особенности epoll.

    Я вас туда приглашу и можем продолжить дисскусию там.
  • select / poll / epoll: практическая разница
    0
    А вы умеете полностью комментарии читать?

    Фича не в многопоточном accept, для которого еще кстати нужно кое-что сделать.

    Фича в простой баллансировке обработки событий между потоками.

    Вы поняли из данной статьи, как это можно сделать с помощью epoll?
    Хотя бы многопоточный accept сможете сделать на основе данной статьи?
  • select / poll / epoll: практическая разница
    0
    Во-первых почему нет, почему если я пишу многопоточное приложение у меня accept должен происходить только в одном месте?

    Во-вторых, а чтение/запись, а sigfd — я должен писать разный код для разных потоков?

    И, честно говоря, теперь уже я вас не понимаю, если вам это не нужно и вы не сталкивались с необходимостью — это не ведь не значит, что не нужно никому?
  • select / poll / epoll: практическая разница
    0
    Вот! Наконец консенсус.

    epoll именно этим и отличается, что позволяет реализовать многопоточный accept, чтение дескрипторов более простым способом и с более лучшей балансировкой.

    И как раз в этом состоит роль его особенностей в виде EPOLLET, EPOLLONESHOT, EPOLLEXCLUSIVE (и не только кстати). Что я собственно и пытался донести.

    И много усилий было сделано после написание данной статьи (2014 год если кто не заметил).

    Данная статья epoll просто не раскрывает.

    И более того на момент появления он обладал теми же недостатками, что и poll/select.
  • select / poll / epoll: практическая разница
    0
    Вы просто читаете мои комментарии наполовину.
    Ваши собственные комментарии:
    Так для малого числа сокетов никакой многопоточности и не нужно. По крайней мере, в сетевой части.

    Как смысл его использования может пропасть когда он — единственное нормальное решение при большом количестве fd?


    А теперь вопрос — при большом количестве fd — может быть таки пригодилась бы многопоточность?
  • select / poll / epoll: практическая разница
    0
    И мы опять возвращаемся к вопросу «а зачем тогда epoll и чем он лучше?».

    Никто epoll'ом пользоваться не заставляет. Но тогда из такой статьи следует — мало fd пользуемся poll/select — много fd пользуемся epoll и все. Добавим к этому, что epoll уникален для linux kernel, и весь смысл пользоваться epoll пропадает — разве не так?
  • select / poll / epoll: практическая разница
    0
    Про это я как раз написал,
    Только в том что можно добавить больше fd?


    В сопроводительном письме к патчу с epoll очень подробно все описано про это.
    Я спрашивал про фундаментальные проблемы select/poll в multithreading, и как они решены в epoll.

    И почему кстати обязательно сокетов это не только к сокетам относиться.
  • select / poll / epoll: практическая разница
    –1
    Вы не ответили на вопрос о преимуществах epoll по вашему мнению.
  • select / poll / epoll: практическая разница
    0
    Тогда позвольте вопрос, а в чем собственно преимущество epoll по вашему мнению тогда? Только в том что можно добавить больше fd?
  • select / poll / epoll: практическая разница
    0
    «Вы либо крест снимите или трусы оденьте».

    Мы говорим о «высоко производительном сетевом приложении» или так поиграться?

    Если так просто поиграться то я конечно ерунду написал, это никому не надо. Проще просто взять poll/select и поделить дескрипторы между потоками. А accept в одном потоке.

    В догонку lwn.net/Articles/542629
  • select / poll / epoll: практическая разница
    0
    Edge triggered — вкусное свойство, но основным я бы его никак не назвал.

    Оно не «вкусное», EPOLLET + EPOLLONESHOT основное для ядра версии до 4.5. Иначе на многопоточном приложении будут проблемы со starvation и thundering herd.

    EPOLLEXCLUSIVE — сценарии, где он нужен, как-то сильно специфичен


    А вот это неправда, он как раз лечит выше перечисленное.

    Так что не разобрать эти вещи если мы говорим о

    проектировании высокопроизводительных сетевых приложения с неблокирующими сокетами

    (заметьте не я это сказал)

    непростительно.

  • select / poll / epoll: практическая разница
    0
    SYSCALL_DEFINE5(select, int, n, fd_set __user *, inp, fd_set __user *, outp,
            fd_set __user *, exp, struct timeval __user *, tvp)
    {
        return kern_select(n, inp, outp, exp, tvp);
    }

    https://github.com/torvalds/linux/blob/813835028e9ae1f18cd11bb0ec591d0f0577d96a/fs/select.c#L720


    Так понятнее ?

  • select / poll / epoll: практическая разница
    0
    Не «так будет правильнее сказать», а собственно вы правы.

    Но glibc тут как раз ни при чем:
    man7.org/linux/man-pages/man2/syscalls.2.html

    Тем не менее syscall select присутствует.
  • select / poll / epoll: практическая разница
    0
    libev не умеет EPOLLET.
  • select / poll / epoll: практическая разница
    0
    Бесплатно есть man. Его вполне достаточно.
    А все таки лучше раскошелиться например на эту книгу, вложения окупятся.

    man7.org/tlpi

    Брать только на английском.
  • select / poll / epoll: практическая разница
    +7

    Тем что он хуже. Внезапно :


    1. В рамках linux select и poll, используют один и тот же syscall poll, точнее даже select это обертка для poll сделанная для совместимости. Почему-то этот факт не упомянут.
    2. Нет никакой информации о pselect и ppoll, наверное они таки для чего-то нужны.
    3. с epoll совсем плохо:
      • из статьи никак не следует, что epoll лучше, основное отличие не упомянуто (edge-triggered EPOLLET)
      • не упомянут EPOLLONESHOT
      • нет информации о thundering herd problem и флага EPOLLEXCLUSIVE

    В общем лучше прочитать официальную страницу man'a http://man7.org/linux/man-pages/man7/epoll.7.html

  • Перехват функций в ядре Linux с помощью ftrace
    0
    Нет просто попали в разряд «Те кому надо уже и так знают, а остальным неинтересно». Объем же скорей признак полноты и охвата материала, а не недостаток. А в целом отличный материал для лекции.
  • Использование файлов-последовательностей ядра Linux
    +2
    Я вам просто намекнул, что было бы отлично добавить в конце статьи список литературы. Во-вторых к статье на lwn есть достаточно ценные комментарии.
  • Использование файлов-последовательностей ядра Linux
    0
    Без всяких инсинуаций оставлю это тут:
    lwn.net/Articles/22355
    www.kernel.org/doc/Documentation/filesystems/seq_file.txt
  • habrahabr.ru → habr.com
    +5
    А амнистия для тех кто уже перевел и где то выложил будет?
  • Заметка о новом интерфейсе linux kernel — gpio uapi
    0
    Если «тогглить» один пин то не быстрее и не медленнее.
  • Пару слов в защиту умных весов: есть ли единый стандарт измерений?
    +1
    Есть:
    OIML R 76, 2006, Nonautomatic weighing instruments.
    Хотите весы, а не «калькулятор», весы должны быть внесены в реестр СИ.

    В паспорте весов должны быть процедура поверки, калибровки и в том числе требование к установке (выравние и пр.).
  • Драйвер виртуальных GPIO с контроллером прерываний на базе QEMU ivshmem для Linux
    0
    Это немного не об этом. gpio_to_irq используется для поиска номера прерывания ядра по глобальному номеру gpio, например в Device Tree. Допустим мы точно знаем на какой номер контакта приходит уведомление от переферийного устройства и нам нужно знать какое прерывание ему соответствует в ядре.
    В качестве примера: mach-ep93xx/simone.c
  • Lurkmore заблокировали согласно 149-ФЗ
    0
    web.archive.org
  • Когда быть хорошим плохо
    –2
    Не вам всем точно книгу надо «Как перестать писать статьи и начать программировать».
  • Когда быть хорошим плохо
    –27
    Автор, иди клепай горшки дальше, а то теоритизировать и иделы строить тут вздумал.
  • Небольшой логгер стека вызовов для C++
    +4
  • Обзор лабораторного блока питания Mastech 3003D
  • Как Microsoft стал тем, что раньше презирал
    +1
    Господа, вы о чем о чем? Это не статья, а набор бессвязного текста.
  • Вебинары по QML и QtQuick: страничная организация пользовательского интерфейса
    +1
    А что вы так на свистелках и перделках зациклились? Ну не будет Qt на мобильничках (хотя порт под тот же самый Android развивается), и что? Я знаю два успешно работающих проекта промышленных контролеров с мордой на Qt, на базе ts7200 (ARM). Если бы Nokia не развивала документацию, обучения и сопровождение, на её месте бы много где сидело Gtk, wxWidgets, у которых с сопровождением и документацией мягко говоря не очень.
  • Qt Build System: спасательный круг для сборки
    +1
    Вот почему всегда в качестве примера приводится сборка какого нибудь «Hello World» (не только для данной системы справедливо, для make, cmake тоже самое)? Нет чтобы взять проэктик с парой модулей там, с более ли менее сложной организацией, детально показать какие преимущества дает для крупных проектов.
  • Кросскомпиляция Qt-4.8.0 под mingw32 (x86) в Gentoo (x86_64)
    0
    А вот это уже интересно. Пожалуй поковыряюсь. Сейчас мне надо кой какую работу завершить, так что приступлю 9-10.
  • Кросскомпиляция Qt-4.8.0 под mingw32 (x86) в Gentoo (x86_64)
    0
    $ ls -la lib/ | grep dll
    -rwxr-xr-x 1 maquefel users 319488 Mar 4 11:26 phonon4.dll
    -rwxr-xr-x 1 maquefel users 3037184 Mar 4 11:20 QtCore4.dll
    -rwxr-xr-x 1 maquefel users 11045376 Mar 4 11:26 QtGui4.dll
    -rwxr-xr-x 1 maquefel users 1225728 Mar 4 11:20 QtNetwork4.dll
    -rwxr-xr-x 1 maquefel users 254976 Mar 4 11:20 QtSql4.dll
    -rwxr-xr-x 1 maquefel users 124928 Mar 4 11:20 QtTest4.dll
    -rwxr-xr-x 1 maquefel users 24347648 Mar 4 12:30 QtWebKit.dll
    -rwxr-xr-x 1 maquefel users 387072 Mar 4 11:20 QtXml4.dll

    Вроде получилось, но как то кривовато, проверять надо.
  • Кросскомпиляция Qt-4.8.0 под mingw32 (x86) в Gentoo (x86_64)
    0
    С ebuild конечно надо попробовать, когда займусь, обязательно попрошу вас о помощи. Тем более, что на профильных форумах меня не соизволили даже послать в man.
  • Кросскомпиляция Qt-4.8.0 под mingw32 (x86) в Gentoo (x86_64)
    0
    С phonon не уверен, а вот webkit вроде нормально собирается, сейчас попробую.
  • Кросскомпиляция Qt-4.8.0 под mingw32 (x86) в Gentoo (x86_64)
    0
    Вы слишком высокого мнения обо мне, к сожалению это заняло больше времени нежели одни выходные.
  • Кросскомпиляция Qt-4.8.0 под mingw32 (x86) в Gentoo (x86_64)
    +1
    Вот-вот, мне тоже данная сборка понадобилась для организации Nightbuild Factory на рабочем сервере. Но я привык экономить место, процессорное время, и точно знать, что где и как у меня установлено.