- 主题:觉得协程不是一个太好的编程模型
那么线程调度的开支呢?
我现在理解协程
但对于线程却困惑了。
协程破坏了全局变量的原子性。
多线程的开发现在却迷茫了
【 在 hgoldfish 的大作中提到: 】
: 协程调度的开销相对内核调度的开销低。但也算比较大的开销。因为有 cpu cache miss 还要保存恢复寄存器。
: 写大带宽 IO 程序最大的开销应该是陷入内核取数据,处理完成后,再次调用操作系统 API 把数据发送出去。收发数据都要陷入内核,即使是用上 mmap() 也是一样陷入内核。
: 现在 linux 的 io_uring 出来,有了这东东,可以做成不陷入内核了。这个才是王道。
: ...................
--
FROM 36.101.221.*
这不是主要的。
从PHP引进协程,多进程模式变成协程模式,第三方库都不可用,因为全局变量不再原子化导致。
线程也是破坏原子化。 就没个声明 线程内全局变量的语法么。
【 在 ylh1969 的大作中提到: 】
: 看你的架构设计。
: 如果采用线程池,线程一经创建,永不销毁,就没有创建销毁的开销。
: 线程数等于核数,也不会发生调度,调度开销可以忽略不计。
: ...................
--
FROM 36.101.221.*
那为什么 linux 不改?
【 在 hgoldfish 的大作中提到: 】
: 原理是这样没错。但 linux 实现的 swapcontext() 比较奇葩,会陷入内核。所以这几个 posix 函数没人用。
--
FROM 36.101.222.*