我的协程栈是mmap分配的,向下生长。
线程池和协程栈尺寸一样,由配置文件决定。
函数调用桢就在栈里呀。
每个连接一个协程,10000个链接就10000个协程,但是不分配它栈。直到收到远过程调用的请求才分配它栈,调用完成收回。在远过程中间有IO调用的话,就会使用这个栈进行yield-resume。
【 在 hgoldfish 的大作中提到: 】
: 这个是 go, java 这些语言的做法。
: 我感觉你的实现是有 BUG 的。我记得你会迁移协程的内存,而不是使用我说的 mmap(MAP_STACK). 这样会导致引用到栈的指针出现问题。这是 c/c++ 在实现协程(纤程)时特有的问题。
: go, java 不需要使用 mmap(MAP_STACK) 的原因是因为他们其实并不使用栈,底层实现是 stackless 是一种编译期的变换,而是使用的函数调用帧,这东东其实是存堆里的。
: ...................
--
修改:ylh1969 FROM 221.218.60.*
FROM 221.218.60.*