< 返回版块

zuston 发表于 2023-08-09 15:50

发现过两次类似的问题,tokio lock await 如果等待过多,就会卡住。这是已知问题还是我的用法问题

评论区

写评论
wuqingyi 2023-08-23 11:16

可以参考 https://tokio.rs/tokio/tutorial/spawning#accepting-sockets 把耗时操作用tokio::spawn放到其他线程执行

作者 zuston 2023-08-11 09:43

恩恩,感谢回复。消息传递带来的代码复杂度有点高

--
👇
songzhi: tokio::sync::Mutex 的性能不一定好,这点在它的文档里有说。所以你得衡量一下你的需求,如果std::sync::Mutex也能满足,说不定用后者性能会更好。或者不用锁,用消息传递试试。

songzhi 2023-08-11 09:02

tokio::sync::Mutex 的性能不一定好,这点在它的文档里有说。所以你得衡量一下你的需求,如果std::sync::Mutex也能满足,说不定用后者性能会更好。或者不用锁,用消息传递试试。

作者 zuston 2023-08-11 09:01

试过,一般 hang 后 console 也卡住了

--
👇
github.com/shanliu/lsys: 有用 tokio-console 看下不?

--
👇
zuston: 代码中主要链路使用的都是 tokio::sync::Mutex . 使用 tonic grpc 写入大量的数据,使用 await-tree 来查看 grpc await 的耗时,发现单个请求长达 30s. 一次请求写入数据量为 14M.

代码如下:https://github.com/zuston/riffle/blob/838ab0a6485967c770ee6033f9a3adf97096b090/src/grpc.rs#L112-L179

--
👇
aj3n: 看你描述里提到了lock,加上系统挂死,没有看到你的代码,只是作为一个占星师来说:你排除了死锁吗?同步锁在异步环境里用的坑排除了么?

github.com/shanliu/lsys 2023-08-10 21:22

有用 tokio-console 看下不?

--
👇
zuston: 代码中主要链路使用的都是 tokio::sync::Mutex . 使用 tonic grpc 写入大量的数据,使用 await-tree 来查看 grpc await 的耗时,发现单个请求长达 30s. 一次请求写入数据量为 14M.

代码如下:https://github.com/zuston/riffle/blob/838ab0a6485967c770ee6033f9a3adf97096b090/src/grpc.rs#L112-L179

--
👇
aj3n: 看你描述里提到了lock,加上系统挂死,没有看到你的代码,只是作为一个占星师来说:你排除了死锁吗?同步锁在异步环境里用的坑排除了么?

作者 zuston 2023-08-10 10:03

代码中主要链路使用的都是 tokio::sync::Mutex . 使用 tonic grpc 写入大量的数据,使用 await-tree 来查看 grpc await 的耗时,发现单个请求长达 30s. 一次请求写入数据量为 14M.

代码如下:https://github.com/zuston/riffle/blob/838ab0a6485967c770ee6033f9a3adf97096b090/src/grpc.rs#L112-L179

--
👇
aj3n: 看你描述里提到了lock,加上系统挂死,没有看到你的代码,只是作为一个占星师来说:你排除了死锁吗?同步锁在异步环境里用的坑排除了么?

aj3n 2023-08-09 21:29

看你描述里提到了lock,加上系统挂死,没有看到你的代码,只是作为一个占星师来说:你排除了死锁吗?同步锁在异步环境里用的坑排除了么?

1 共 7 条评论, 1 页