LINUX.ORG.RU
 

Библиотека libevent для асинхронного неблокирующего ввода/вывода


0

1

В этом цикле статей рассматривается библиотека libevent, предназначенная для обработки оповещений о событиях и организации асинхронного ввода/вывода.
В первой статье описывается общая структура библиотеки.
Вторая статья посвящена основам использования libevent: наибольшее внимание уделено обработке событий.
В третьей статьеречь идёт о механизмах буферизации ввода/вывода. Тема четвёртой, заключительной статьи - применение libevent в сетевых приложениях.

>>> Подробности

Метки:

*** ()
Проверено: mono (16.07.2011 11:48:53)

[#]  

Лучше бы про Pi-calculi и настоящее параллельное программирование писали, чем про этот убогий асинхрон.

anonymous ()
[#] Ответ на: комментарий от anonymous 16.07.2011 12:17:13  

Ну, лично меня заинтересовало.

Вопрос вот в чём: вики говорит, что

>>-----Цитата---->>

ОС Linux, *BSD, Mac OS X, Solaris и Windows.

<<-----Цитата----<<

А как же поддержка всяких AIX, HP-UX, QNX и прочего?

* ()
[#] Ответ на: комментарий от anonymous 16.07.2011 12:17:13  

Это не параллельное программирование. Это кросс-платформенная обёртка всяких там poll.

***** ()
[#] Ответ на: комментарий от anonymous 16.07.2011 12:17:13  

>Лучше бы про Pi-calculi и настоящее параллельное программирование писали, чем про этот убогий асинхрон.

Никто не мешает сочетать одно с другим. ;)

anonymous ()
[#]  
kost-bebix

Спасибо, почитаем.

** ()
[#]  
HappySquirrel

Закопать немедленно

Однажды, год назад где-то, мы решили ее попробовать в реальном проекте. Нужен был сервер, работающий под РедХат. Довольно быстро посыпались проблемы. Мы писали одну заплатку за другой. Любимый перл в этом чуде был exit(1) при небольших и совсем не фатальных проблемах. Это мы тоже зашили, переписав error handler и загрузив его вместо их стандартного. Но нас добила поддержка Windows. Libevent в Windows использует.. select, и про 10K problem и в ус не дует. К этому моменту обьем кода нашей обертки уже начала быть сравнима с обьемом libevent. Короче, выбросили libebent и написали с нуля. Кода там немного, на порядок меньше чем в libebent, производительность не хуже, и работает одинаково быстро как под Linux, так и под Windows. Я не хочу обсуждать версию 1.4 против 2.0. Но те баги, что мы увидели в 1.4, которая была в каждом дистре - они неприемлимы даже в версии 0.1.

* ()
[#] Ответ на: Закопать немедленно от HappySquirrel 16.07.2011 13:28:10  

Re: Закопать немедленно

Какой механизм использовали в Windows?

anonymous ()
[#] Ответ на: Закопать немедленно от HappySquirrel 16.07.2011 13:28:10  
Reset

Да, версия до 2.0 это жесть, но в 2.0 исправлены многие косяки, мы сейчас на реальном проекте её используем, а именно используем http-клиент и сервер оттуда. Работает все как часы, нагрузку держит.

***** ()
[#] Ответ на: Re: Закопать немедленно от anonymous 16.07.2011 14:15:47  
HappySquirrel

Под Windows, сообщения Winsock направляются невидимому окну через WSAAsyncSelect. Сообщения окна слушаются в отдельной нити.

* ()
[#]  
tazhate

>статьеречь

пробел забыли.

***** ()
[#] Ответ на: комментарий от anonymous 16.07.2011 12:17:13  

> Лучше бы про Pi-calculi и настоящее параллельное программирование писали, чем про этот убогий асинхрон.

+inf

***** ()
[#]  
hobbit

Почитав комментарии, начинаешь понимать людей, которые серверные приложения пишут на Qt :) Хотя, конечно, избыточнооость...

***** ()
[#] Ответ на: Re: Закопать немедленно от anonymous 17.07.2011 14:03:47  

Re: Закопать немедленно

Используется в node.js, и довольно успешно.

anonymous ()
[#] Ответ на: Re: Закопать немедленно от anonymous 18.07.2011 8:42:04  

Re: Закопать немедленно

Ага. Если не считать жесточайших тормозов и утечек.

anonymous ()
[#] Ответ на: Закопать немедленно от HappySquirrel 16.07.2011 13:28:10  

Мы успешно используем libevent в реальном проекте (версию 1.4). У libevent достаточно хорошо продуманная архитектура и простой код. У них также адекватные мэйнтейнеры, которые принимают патчи и активно общаются в рассылке. Если у вас возникли проблемы с libevent, и если вы даже написали патч, то почему бы не зарепортить баг?

> ...попробовать в реальном проекте. Нужен был сервер, работающий под РедХат. Довольно быстро посыпались проблемы.

Как показывает опыт, в подавляющем числе случаев ошибки, связанные с libevent, возникают из-за ошибок основной программы или из-за неправильного использования libevent.

> Мы писали одну заплатку за другой.

Не верю. Мы при очень интенсивном использовании libevent нашли только пару багов (исправления уже давно в коде libevent).

> Но нас добила поддержка Windows.

Это уже какой-то другой реальный проект? Ведь речь шла о РедХате.

*** ()
[#] Ответ на: Закопать немедленно от HappySquirrel 16.07.2011 13:28:10  

> Libevent в Windows использует.. select, и про 10K problem и в ус не дует.

Не знаю, как в 1.4, но в 2.0 (цитирую документацию):

> asynchronous-IO bufferevents

> A bufferevent that uses the Windows IOCP interface to send and receive data to an underlying stream socket. (Windows only; experimental.)

* ()
[#]  

Чувствуется будет чумовая вещь.

()