天才一秒记住【狂风中文网】地址:https://www.kfzw.net
本又写了一行。
“那你在实际项目里用过asyncio吗?”
陈哲想了想,摇头:“用过一点。
不过有一次写异步爬虫,aiohttp搭配asyncio,跑起来之后发现有些请求没发出去。
后来查了半天,发现是事件循环里有个地方忘了await。
调了一天才找到。”
提米在旁边笑了一声:“我懂。
我第一次用asyncio的时候,在代码里写了个time.sleep,整个事件循环都卡住了。
后来才知道要用asyncio.sleep。
“7
几个人笑了。
气氛鬆快了一点。
本没笑。
他看著陈哲,又写了一行字。
“那gil在什么情况下是真正的瓶颈?”
陈哲的手指微微紧了一下。
这个问题的方向和他预想的不太一样——不是基础题,是在问真实场景的边界判断。
他想了想,开口:“如果是纯cpu计算,单线程已经跑满一个核心,gil就是瓶颈。
比如科学计算、图像处理、机器学习训练这些场景。
但那种情况一般用numpy,它底层是c,不在python层面算。”
本等著他继续。
“如果是混合场景,”
陈哲说,“计算加i0,比如web服务,gil的影响要看请求量和每个请求的计算占比。
qps不高的时候,gil不是问题。
qps上去之后,每个请求的计算时间只要超过几十毫秒,gil就会开始卡。”
他顿了顿。
“具体閾值要看业务。
一般估算的话,单核能撑的qps上限除以cpu占比,再除以並发係数。
比如单核能撑1000qps纯i0,如果每个请求有10%的cpu计算,那实际能撑的qps大概在100左右。
超过这个数就需要多进程或者换语言。”
本听完,没说话。
他低头在白板上又写了一行字。
这次写得很慢,像是在斟酌什么。
“你写过多线程的生產级代码吗?”
陈哲看著那行字,沉默了两秒。
然后他摇了摇头。
“没有。
我写的都是单机脚本和web后端。
多线程只在demo里跑过,没上过生產。”
本的眉头微微动了一下。
本章未完,请点击下一章继续阅读!若浏览器显示没有新章节了,请尝试点击右上角↗️或右下角↘️的菜单,退出阅读模式即可,谢谢!