Повысьте Asio на Linux не Используя Epoll

У меня создалось впечатление, которые повышают:: asio использовал бы установку epoll по умолчанию вместо избранной реализации, но после запущения некоторых тестов похоже, что моя установка использует выбор.

ОС: RHEL 4
Kernel:2.6
GCC:3.4.6

Я записал немного тестовой программы для проверки, какой реакторный заголовок использовался, и это похоже на свое использование избранного реактора, а не epoll реактора.

#include <boost/asio.hpp>

#include <string>
#include <iostream>

std::string output;

#if defined(BOOST_ASIO_EPOLL_REACTOR_HPP)

int main(void)
{
    std::cout << "you have epoll enabled." << std::endl;
}

#elif defined(BOOST_ASIO_DETAIL_SELECT_REACTOR_HPP)

int main(void)
{
    std::cout << "you have select enabled." << std::endl;
}

#else

int main(void)
{
    std::cout << "this shit is confusing." << std::endl;
}


#endif

Что я мог делать неправильно?

5
задан Scott Lawson 23 June 2010 в 23:31
поделиться

1 ответ

Ваша программа тоже говорит "выберите" для меня, но asio использует epoll_wait (), как сообщает ps -Teo tid, wchan: 25, comm .

Как насчет

#include <iostream>
#include <string>
#include <boost/asio.hpp>
int main()
{
std::string output;
#if defined(BOOST_ASIO_HAS_IOCP)
  output = "iocp" ;
#elif defined(BOOST_ASIO_HAS_EPOLL)
  output = "epoll" ;
#elif defined(BOOST_ASIO_HAS_KQUEUE)
  output = "kqueue" ;
#elif defined(BOOST_ASIO_HAS_DEV_POLL)
  output = "/dev/poll" ;
#else
  output = "select" ;
#endif
    std::cout << output << std::endl;
}

(лестница ifdefs взята из /usr/include/boost/asio/serial_port_service.hpp )

4
ответ дан 15 December 2019 в 00:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: