`
aigo
  • 浏览: 2644444 次
  • 性别: Icon_minigender_1
  • 来自: 宜昌
社区版块
存档分类
最新评论

boost::asio中锁相关的性能问题

阅读更多

文章提到的问题,很多其他的网络库也有相同问题。

 

原文:http://stackoverflow.com/questions/1234750/c-socket-server-unable-to-saturate-cpu

boost::asio is not as thread-friendly as you would hope - there is a big lock around the epoll code in boost/asio/detail/epoll_reactor.hpp which means that only one thread can call into the kernel's epoll syscall at a time. And for very small requests this makes all the difference (meaning you will only see roughly single-threaded performance).

Note that this is a limitation of how boost::asio uses the Linux kernel facilities, not necessarily the Linux kernel itself. The epoll syscall does support multiple threads when using edge-triggered events, but getting it right (without excessive locking) can be quite tricky.

BTW, I have been doing some work in this area (combining a fully-multithreaded edge-triggered epoll event loop with user-scheduled threads/fibers) and made some code available under the nginetdproject.

 

 

分享到:
评论

相关推荐

    Boost ASIO C++ 网络编程 中文版 带全书所有例子代码

    在多线程环境中使用ASIO,需要理解锁、互斥量和条件变量等同步原语。ASIO库本身是线程安全的,但开发者仍需确保自己的代码也遵循正确的并发模式。 8. **使用SSL/TLS加密通信** 学习如何使用ASIO的SSL支持实现安全...

    Boost.Asio C++ Network Programming

    ### Boost.Asio C++ Network Programming #### 知识点概览 - **Boost.Asio库简介** ...本书不仅涵盖了 Boost.Asio 的基础用法,还介绍了如何运用高级特性来解决实际问题,是一本值得深入学习的重要参考书籍。

    boost_asio_参考手册

    2. **Strands**: Strands是Asio中的一个概念,它允许在没有显式锁定机制的情况下使用线程。Strands可以将异步操作序列化,这样就可以在单线程中顺序执行一系列异步操作,而不会导致数据竞争和状态冲突。 3. **缓冲...

    boost thread dll 应用

    2. **线程同步**:Boost.Thread 提供了多种同步原语,如`boost::mutex`(互斥锁)、`boost::condition_variable`(条件变量)、`boost::future`和`boost::promise`(异步操作)。这些同步机制可以帮助避免数据竞争,...

    Boost C++ 库

    Boost C++ 库中的`boost::thread`库提供了一组全面的API来支持多线程编程,包括线程的创建、同步、通信等,同时还提供了一些高级的并发原语,如互斥锁、条件变量等,帮助开发者构建可靠且高性能的并发应用程序。...

    Boost.Asio.docx

    4. **核心概念和功能**:包括基本的Boost.Asio结构、无线程并发模式(Proactor设计模式)、线程与Boost.Asio的交互、Strands(无显式锁线程安全)、缓冲区管理、流操作、反应器风格的操作、行基础操作、自定义内存...

    boost 线程库的应用例子, 罗大侠的书本配例,基于1.52

    在实际项目中,我们还可以结合使用`boost::this_thread::yield()`来改善线程调度,使用`boost::thread_group`管理一组线程,使用`boost::asio`库实现异步I/O操作等。 总结来说,Boost线程库提供了强大的多线程编程...

    Boost.Asio C++ Network Programming Second Edition

    本书会讨论如何在Boost.Asio中正确地处理网络错误,确保程序的健壮性。同时,还会涉及线程安全问题,因为网络应用往往需要在多线程环境下运行。 此外,作者还会探讨高级主题,如使用Boost.Asio实现TCP和UDP协议的...

    boost 1_38

    ### Boost 1.38 知识点详解 #### 一、Boost库简介 Boost库是一组由C++社区维护的自由开源库集合,旨在提供跨平台和高...希望本文能帮助读者更好地理解和掌握Boost 1.38的相关知识,在实际工作中发挥出它的巨大价值。

    快速了解Boost.Asio 的多线程模型

    在 Boost.Asio 中,`io_service` 是核心组件,用于调度和执行异步操作的回调函数。 在多线程环境中,Boost.Asio 提供了两种主要的多线程模型来处理 I/O 事件: 1. **每个线程一个 I/O Service** - 在这个模型中,...

    mysql5.7.23源码编译包带boost

    7. **Boost库的集成**:Boost库包含了一系列高质量的C++库,如Boost.Thread、Boost.Asio等,这些库可以用于多线程编程、网络通信等方面,与MySQL结合可以提升MySQL的并发处理能力和网络通信效率。 8. **SQL标准的...

    Linux高性能服务器编程,linux高性能服务器编程 pdf,C,C++

    8. **框架与库的使用**:可能涵盖了如Nginx、Apache、libevent、libev、Boost.Asio等服务器框架和库的使用,以及如何利用它们简化服务器开发。 9. **安全编程**:讲解如何处理服务器的安全问题,如输入验证、防止...

    提升natsasio客户端.zip

    NATS ASIO客户端是NATS客户端的一种实现,利用了Boost.ASIO库来处理网络通信。Boost.ASIO是一个用于C++的异步I/O库,它可以方便地处理套接字、定时器和其他I/O对象的事件。 在"提升natsasio客户端"的上下文中,我们...

    C++多线程聊天程序代码

    `boost.asio`提供了很好的支持,允许在一个线程中处理多个I/O事件。 6. **数据结构**:消息队列、用户列表等数据结构的设计和管理对于聊天程序的高效运行至关重要。合理的数据结构可以帮助优化查找、插入和删除操作...

    mysql-boost-5.7.16.tar.gz mysql5.7.16源码包

    Boost.Asio库特别适用于网络编程,对于数据库服务器来说,这意味着更好的并发处理和更低的系统资源消耗。 **编译与安装MySQL 5.7.16**: 解压"mysql-5.7.16"后,需要按照以下步骤编译和安装: 1. 配置环境:确保...

    C++线程池实现 vc2015编译

    不过,也有可能这个项目使用了其他第三方库,如Boost库的`boost::thread`和`boost::asio`,它们提供了更高级的线程和异步操作支持。 总的来说,这个项目提供了C++线程池的一个实例,通过分析源代码,我们可以深入...

Global site tag (gtag.js) - Google Analytics