- 主题:觉得协程不是一个太好的编程模型
【 在 hgoldfish 的大作中提到: 】
: 是 mmap(MAP_STACK) 吗? 如果不是的话,mmap() 也会提前分配出内存,非常浪费内存。
:
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);
MAP_GROWSDOWN不就是指的向下生长?
当年没有发现MAP_STACK选项。
应该还有那些设置项?
--
修改:ylh1969 FROM 221.218.60.*
FROM 221.218.60.*
【 在 hgoldfish 的大作中提到: 】
: 是 mmap(MAP_STACK) 吗? 如果不是的话,mmap() 也会提前分配出内存,非常浪费内存。
:
请教一下,用过MS的IOCP吗?
可以一个线程守护很多其他线程提交的完成事件吗?
可以多个线程守护这些事件吗?
linux的AIO是自己提交的任务自己守护,但是可以绑定一个eventfd,把这个fd排队到epoll,就可以一大堆线程守护一大堆fd。
--
修改:ylh1969 FROM 221.218.60.*
FROM 221.218.60.*
有 MAP_GROWDOWN 就是对的。不会全部分配。
MAP_STACK 在 Linux 是 no-op,但是在 openbsd 里面是有效的。
想要跨多种平台的话,最好也加上。
上面两个 flag 经常一起出现。
【 在 ylh1969 的大作中提到: 】
: 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);
: ...................
--
修改:hgoldfish FROM 59.61.196.*
FROM 59.61.196.*
【 在 hgoldfish 的大作中提到: 】
: 有 MAP_GROWDOWN 就是对的。不会全部分配。
: MAP_STACK 在 Linux 是 no-op,但是在 openbsd 里面是有效的。
: 想要跨多种平台的话,最好也加上。
: ...................
OK,多谢。
--
FROM 221.218.60.*
IOCP我用过,你问的两个,答案都是yes
【 在 ylh1969 的大作中提到: 】
: 请教一下,用过MS的IOCP吗?
: 可以一个线程守护很多其他线程提交的完成事件吗?
: 可以多个线程守护这些事件吗?
: ...................
--
FROM 222.131.200.*
哦,说说看,学习学习。
如何一(几)个线程提交,另一(几)个线程守护。像epoll那样使用。
【 在 z16166 的大作中提到: 】
: IOCP我用过,你问的两个,答案都是yes
:
--
修改:ylh1969 FROM 221.218.60.*
FROM 221.218.60.*
对。但是我的理解是这个用法多个线程一起服务同一个 socket 没有太大的意义吧?
你们是什么场景中,需要由多个线程来处理同一条 TCP 连接的?
【 在 z16166 的大作中提到: 】
: IOCP我用过,你问的两个,答案都是yes
--
FROM 110.81.0.*
这不是主要的。
从PHP引进协程,多进程模式变成协程模式,第三方库都不可用,因为全局变量不再原子化导致。
线程也是破坏原子化。 就没个声明 线程内全局变量的语法么。
【 在 ylh1969 的大作中提到: 】
: 看你的架构设计。
: 如果采用线程池,线程一经创建,永不销毁,就没有创建销毁的开销。
: 线程数等于核数,也不会发生调度,调度开销可以忽略不计。
: ...................
--
FROM 36.101.221.*
不是这个意思。
是一个连接可以被任何一个线程处理,任何时候可以被任何线程丢进事件队列,并立即生效。队列可以被任意线程守候,但是一个fd只能激活一个线程,只能有一个线程持有。
许多线程守护许多socket。
这是作为线程调度器的基础。
许多线程把许多事件丢进一个队列并由许多线程守护,
但是一个线程只处理一个事件。
如果一个事件被多个线程捕获,就叫做 惊群,epoll是有惊群的,要设法避免。
【 在 hgoldfish 的大作中提到: 】
: 对。但是我的理解是这个用法多个线程一起服务同一个 socket 没有太大的意义吧?
: 你们是什么场景中,需要由多个线程来处理同一条 TCP 连接的?
:
--
修改:ylh1969 FROM 221.218.60.*
FROM 221.218.60.*
收发全双工就是一种场景吧
http是一收一发,其他的协议/场景是可能有收的同时也在发的,一个线程负责收,一个线程负责发。
IOCP是n个线程处理m个连接,以WSASend()/WSARecv()请求的完成结果作为派发单位,派发给对应的线程(优先派发给正在运行的线程,减少线程切换开销),不管是哪个tcp连接的。当然,派发信息里携带的有是哪个tcp连接的context信息的(completion key。overlapped结构也可以扩展一下,存放自己的连接信息)。
【 在 hgoldfish 的大作中提到: 】
: 对。但是我的理解是这个用法多个线程一起服务同一个 socket 没有太大的意义吧?
: 你们是什么场景中,需要由多个线程来处理同一条 TCP 连接的?
:
--
修改:z16166 FROM 222.131.200.*
FROM 222.131.200.*