我在actix里面试着用了休眠,结果超过100就不能异步了,一开始还以为是最大连接数的问题,但调了也没用,试了自带的actix_web::rt::time::delay_for
,async-std的async_std::task::sleep
都是这样,用tokio的休眠貌似不兼容。后来用tokio手撕了一个tcpsocket的简易http-helloworld服务,然后用tokio睡眠,还是一样最多同时休眠100个协程,实在搞不清楚是这么回事。
async fn index(_req: HttpRequest) -> &'static str {
// sleep(Duration::from_secs(5)).await;
// task::sleep(Duration::from_secs(5)).await;
actix_web::rt::time::delay_for(Duration::from_secs(5)).await;
"Hello world!"
}
actix路由句柄如上,本地100并发就是5秒返回,101并发就是10秒返回,1000并发就得50秒才能全部返回。
以前在win10用python3.7写fastapi的时候也遇到过,最大不超过512的协程连接数,改Linux或升3.8就解决了。
现在rust不知道是不是操作系统的问题还是我哪里没设置对的问题,求大佬解惑。
linux暂时没试,不知道在linux里面会不会正常。
1
共 3 条评论, 1 页
评论区
写评论都是开release的本地连接,根据网站测试结果不应该这么久吧,而且actix比我手撕的简易http还快,就是那种只要有链接就返回
b"HTTP/1.1 200 OK\r\n\r\nhello_world!"
的虚假服务,得快一倍,但和网测还是有差距。。--
然后拿reqwest测了测actix单线程的hello-world,连接数连接多少都没多大问题,但一万协程并发actix连接收到带返回得要2-6秒不等,和www.techempower.com/benchmarks测试怎么差这么多。。。
疑惑了。
我傻了,又是python的问题,我用的是3.9的aiohttp异步请求,不知道哪里设置了默认100连接,查了下也不会调,可能又是上linux搞不好就正常了。
用tokio写了不用socket的纯休眠一点问题没有,客户端换了reqwest的并发也完全没问题,10000并发服务端休眠5秒,整体发送加返回时间在10秒左右。
用云服务器测了下reqwest单线程每秒入包最高能有近8000包,单机全核能有几万,python的aiohttp协程发包也能发出近3000包,单机全核多进程也能有近9000包,不晓得到底是咋回事,为啥aiohttp连接本地的actix就只能连100。
然后拿reqwest测了测actix单线程的hello-world,连接数连接多少都没多大问题,但一万协程并发actix连接收到带返回得要2-6秒不等,和www.techempower.com/benchmarks测试怎么差这么多。。。
疑惑了。
--
👇
spacemeowx2: 你这个。。我觉得不是休眠的问题,异步框架的sleep基本都是维护一个堆再用操作系统的休眠的。
你这个情况我认为大概率是TCP最大连接数被限制了
你这个。。我觉得不是休眠的问题,异步框架的sleep基本都是维护一个堆再用操作系统的休眠的。
你这个情况我认为大概率是TCP最大连接数被限制了