现在都是64位机了吧,资源不是问题。
stackless没有可用性。
我的解决办法是在多线程协程服务器中,只有发出了服务请求并被受理的客户端context,才分配栈,栈的生命期,只存在于本次服务期间,一旦服务完成,context进入等待状态前,收回它的栈。只有活动任务占用栈,等待状态的任务不占用栈。
比如ATM服务器,那些呆着的都没有栈。
即使操作的,没有与服务器交互的期间也没有。只有在与服务器一去一回的瞬间,这个任务才有栈。这期间它可以以同步方式进行异步IO操作,也可以调动数据库进行业务。stackless,你敢玩数据库?还有其他第三方软件接口,人家需要多少栈你管不着,你的任务,分配给人家足够的栈。
【 在 hgoldfish 的大作中提到: 】
: 这一套要是真的那么好用早就流行起来了。但事实上是没有。
: ucontext 这几个函数是不跨平台的,在 windows 下不能用也就算了,连 android 同样是 linux 内核也用不了。
: 而且因为它申请的 mmap(MAP_GROWDOWN | MAP_STACK) 内存。一次申请 8MB 的话,在以前 32 位机器里,只有 2GB 的内存空间经常不够用。
: ...................
--
修改:ylh1969 FROM 221.221.55.*
FROM 221.221.55.*