线程在IO操作未完成的时候也会发生线程Context切换吗
CFS调度器,在执行IO时挂起,在IO完成时换醒,这两个都是上下文切换,采用红黑树做wait_queue 时间为 O(log m) ,m为同优先级上下文数问题是并发量大时,web应用不是读网络就是写,是有大量IO的(并发量大时),也就是会有大量上下文切换,每次开销都是O(log m)所以才会提出Fiber或Coroutine,把切换开销留在用户态,自己在程序内调度请搜 C10K问题下为什么传统线程模型不再适用
■网友
你把操作系统的调度想的太牛逼了 先去看下现代操作系统(原书第3版) 高清PDF扫描版 电子书 下载这本书的前两章
■网友
IO操作没完成的话,线程不会再被调度。但是,很多线程确实会带来额外的开销。如果应用是计算密集的,可能在一部分计算没有完成的时候,就切换到另一个线程了。这种情况最好是让它一直算完。算到一半,切换出去,过一会儿再切回来,就白白浪费了两次切换的开销。CFS的话,时间片的长度不固定,系统里的活跃线程数越多,切换的就越快。这也会提高切换的开销。另外,更多线程,会消耗更多内存;而消耗内存,就是挑战Cache和内存的容量。Cache未命中,访问主存的话,要几百个周期;内存不够,磁盘交换,上亿周期……不过,对于网络服务器来说,一般都是IO密集的。只要别引起磁盘交换,浪费一点,问题也不大。
■网友
【线程在IO操作未完成的时候也会发生线程Context切换吗】 发生阻塞io时, 线程由执行, 到挂起, 再到中断唤醒, 再被调度器安排执行, 开销是很大的, 同时更容易导致cache失效, 你说的那个模型在并发下, 同时存在成千上万的线程, 开销可想而知。
推荐阅读
- 探访水电厂“内科医生”:操作精度达头发丝的六十分之一
- 英雄联盟快捷键Q、E、R咋操作呢
- 环球车讯网|特斯拉FSD新版,会更接近人类的操作习惯?
- 客栈通PMS咋操作和携程账号直连
- 既然c程序编译为机器码直接操作硬件,为啥不同操作系统下需要重新编译
- 如果要在手机上做一款FPS+MOBA,你会咋设置操作模式来让其获得最佳体验
- 阿言爱汽车|你知道吗?这几款摩托车既是亲戚又是对手,不过这种操作好吗?
- 贾玲|佟丽娅成功追星刘德华,还不忘到贾玲面前炫耀,沈腾操作更有意思
- 切糕王子误操作事件其中的淘宝规则分析是切糕王子的问题还是淘宝自己的问题
- 焕脸|抢镜女王又发威了!《焕脸》女配迷之操作,女主袁姗姗风头被抢光
