- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用boost::io_service构建并行执行计算作业的线程池。有些作业不允许同时运行,我认为这是boost::io_service::strand的理想应用。作为,执行顺序作业的顺序与无关,我要问,应该使用两种使用链的方式中的哪一种:
strand.post(bind(jobA...));
io_service.post(strand.wrap(bind(jobA...)))
最佳答案
您可以互换使用上述两种方法,这将导致相同的结果。我非常怀疑是否存在性能差异,但是如果存在性能差异,则在两个函数(strand.post
与io_service.post
)调用的开销中,但在io_service
的实际执行中却没有,因为它们在后台都执行相同的操作,并且具有相同的执行路径。
我猜想io_service.post()
所需的时钟周期要少一些,但与此同时,我也猜想这种微优化在您的应用程序中与太阳辐射的干扰以及CPU必须重新执行指令一样引人注目。我什至不知道那是否是一个真实的现象,但是当试图提出一种冗长的方式说“别担心”时,这听起来很酷。如果实际上存在性能差异,请共享基准。 *对自己注视*
关于multithreading - boost::io_service::strand性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6386682/
strand::wrap() 的行为被定义为它创建一个仿函数,该仿函数将在调用时执行 strand::dispatch()。我最近在我们的一个执行以下序列的应用程序中遇到了一个错误: my_great
strand::post() 和 strand::wrap() 之间的性能差异是什么?使用 strand::wrap() 时关于竞争条件的故事是什么? 最佳答案 只是为了澄清,strand::wrap
如果有一个通用方法接受一些处理程序: template void Register( HandlerType && handler ) { m_handler( std::forward( h
由于最新版本的 boost,asio 推出了新的执行器并提供了 asio::strand .所以现在完全可以使用 asio::strand而不是 io_context::strand .但它们不能互换
我有一份 asio::io_service::strand . 复制的链及其源是不同的执行者吗?换句话说,传递给复制链的函数和传递给源链的另一个函数是否可能由两个不同的线程同时执行? 或者这两个分支在
我必须开发一个与服务器对话的异步客户端。客户端在与主应用程序不同的线程中运行,并使用回调链读取服务器发送的内容。每个读取处理程序通过一个链注册下一个(它有点复杂,因为我使用类方法作为回调,所以我需要绑
我对使用 strand::wrap 和 strand::post 发帖之间的区别感到迷惑不解?似乎两者都保证序列化,但是如何使用 wrap 序列化而不获得一致的顺序?似乎他们都必须做同样的事情。我什么
在this blog post (2010) ,有人试图使用 Boost::strand 工具解决生产者/消费者问题。我感觉他没有捕获要点,他的程序从来没有同时运行一些生产者和一些消费者,但我不是 b
我有一个关于什么在 strand 中运行,什么不运行的问题。我已经阅读了关于 SO 的帖子以及 strand 的文档,但我想确保我已经正确理解了它与下面代码的关系。 下面的类是一个 tcp 客户端,它
我正在尝试将一些事件处理程序存储在数组中。其中一些被 boost::strand::wrap 包裹。 boost::function proc_handlers[] = { boost::bi
我编写此服务器代码已有一段时间了。我从超过 1 个线程调用 io_service::run,但我不确定我是否需要在这里使用 strand。因为我从不多次调用 async_read 。如果其他连接需要向
这是我的代码: void client_connection::serve() { asio::async_read(this->socket_, asio::buffer(&buffer_,
我正在编写一个程序,将读取的数据转发给另一个对等点。我有一个在每次读取套接字上的数据后调用的方法。此方法将数据发布到一个链中以将其写回另一个对等点。当发送大块数据时,应用程序发回的数据与接收到的数据不
我最近使用了 boost::asio::strand。我对此没有经验。 如果我用 strand::wrap() 调用 function1 并用 调用 function2 ,我遇到了什么~functio
我想在我的代码中添加一个运行时断言,以检查代码是否受到给定链的保护。 这是一个伪例子: ... asio::io_service my_io_service; asio::strand my_stra
看了boost::asio的文档,还是不清楚什么时候需要用asio::strand。假设我有一个使用 io_service 的线程,那么按如下方式在套接字上写入是否安全? void Connectio
boost::asio 库提供了一个有趣的同步模型,使用“strands”来序列化对通常需要锁的资源的访问。这实际上通过将每个锁定操作转变为入队来 boost 并行性。 搜索“strands”只会产生
asio::async_write(m_socket, asio::buffer(buf, bytes), custom_alloc(m_strand.wrap(cus
我使用的是最新的 ASIO 版本(目前为 1.18.0)。目前正在设计一个带有定时器(用于超时)的多线程异步 TCP 服务器。我有一个 io_context 有多个线程调用它的 run() 函数。我接
在 Java 中我们有“线程”,在 CPython 中我们有线程(非并发)和“进程”。 在 JS 中,当我启动一个 async 函数或方法时,我如何正式引用这些“执行代码链”? 我听说每个这样的代码块
我是一名优秀的程序员,十分优秀!