94得票2回答
无栈协程和有栈协程有何不同?

背景: 我问这个问题是因为我目前有一个应用程序,其中有很多(数百到数千个)线程。大多数线程在大部分时间内都是空闲的,等待工作项被放入队列中。当工作项可用时,就会通过调用一些任意复杂的现有代码来进行处理。在某些操作系统配置下,应用程序会遇到最大用户进程数的内核参数限制,因此我想尝试通过减少wo...

14得票2回答
Boost.Coroutine和Boost.Coroutine2之间的区别

Boost.Coroutine和Boost.Coroutine2之间的主要区别是什么?

14得票1回答
boost::asio::spawn是什么?

我无法形成一个使用spawn时控制流如何发生的心理图像。 当我调用 spawn(io_service, my_coroutine) 时,它是否会向 io_service 队列添加一个新的处理程序,该处理程序包装对 my_coroutine 的调用? 当我在协程中调用使用我的 yield_c...

12得票1回答
分段栈是如何工作的

如何工作分段堆栈?本问题也适用于Boost.Coroutine,因此我在这里使用C++标签。主要的疑问来自于这个article。看起来它们所做的是在堆栈底部保留一些空间,并检查是否已通过在分配的内存上注册某种信号处理程序(可能通过mmap和mprotect)而损坏。然后当他们发现空间不足时,他...

11得票3回答
C++绿色线程的堆栈分配

我正在研究C++的绿色线程,主要是使用boost::coroutine2和类似的POSIX函数,比如makecontext()/swapcontext(),并计划在boost::coroutine2之上实现一个C++绿色线程库。这两个库都要求用户为每个新的函数/协程分配一个栈。 我的目标平台...

8得票2回答
Boost Asio和Coroutine2示例

在阅读 coroutine2 文档时,我发现了一个漂亮的 代码片段,展示了如何与 asio 一起使用它。 以下是文档中的代码,仅供参考: void session(boost::asio::io_service& io_service){ // construct TCP-...

8得票2回答
如何在大型项目中使用-fsplit-stack

我最近发布了一个关于堆栈分割和boost协程的问题,但似乎-fsplit-stack方法只适用于使用该标志编译的源文件,当您跳转到另一个未使用-fsplit-stack编译的函数时,运行时会崩溃。例如这个例子。 这意味着运行时使用局部技术来检测当前堆栈是否已超出。而不是“警卫页信号”技巧,即...