- 论坛徽章:
- 11
|
本帖最后由 zylthinking 于 2017-02-08 14:48 编辑
回复 45# zylthinking
靠, 我看到了
if(!rs->tc.uc_stack.ss_sp) {
task->uc.uc_stack.ss_sp=mmap(0, use_stack_size,
PROT_READ | PROT_WRITE | PROT_EXEC,
MAP_PRIVATE | MAP_ANON | MAP_GROWSDOWN, -1, 0);
if(task->uc.uc_stack.ss_sp==MAP_FAILED) {
task->uc.uc_stack.ss_sp=NULL;
do_work(task->sv.TCB_no); //进行你的服务,不使用AIO
continue;
}
} else {
task->uc.uc_stack.ss_sp=rs->tc.uc_stack.ss_sp;
rs->tc.uc_stack.ss_sp=NULL;
rs->tc.uc_stack.ss_size=0;
}
看你的意思是, 如果这个线程分配的私有空间已经被前一个 task 认领了, 新来的 task 就不走协程模式了?
又看错了, 不是不走, 还是新分配; 也就是有一个默认的, 默认的没了, 就新分配; 说到底, 还是每个协程一个私有栈; 只不过搭配了一个内存池而已. 在成千上万个协程消耗大量内存方面, 并没有丝毫负担的减轻
|
|