zuston 发表于 2023-08-09 15:50
发现过两次类似的问题,tokio lock await 如果等待过多,就会卡住。这是已知问题还是我的用法问题
可以参考 https://tokio.rs/tokio/tutorial/spawning#accepting-sockets 把耗时操作用tokio::spawn放到其他线程执行
恩恩,感谢回复。消息传递带来的代码复杂度有点高
-- 👇 songzhi: tokio::sync::Mutex 的性能不一定好,这点在它的文档里有说。所以你得衡量一下你的需求,如果std::sync::Mutex也能满足,说不定用后者性能会更好。或者不用锁,用消息传递试试。
tokio::sync::Mutex 的性能不一定好,这点在它的文档里有说。所以你得衡量一下你的需求,如果std::sync::Mutex也能满足,说不定用后者性能会更好。或者不用锁,用消息传递试试。
试过,一般 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,加上系统挂死,没有看到你的代码,只是作为一个占星师来说:你排除了死锁吗?同步锁在异步环境里用的坑排除了么?
有用 tokio-console 看下不?
代码中主要链路使用的都是 tokio::sync::Mutex . 使用 tonic grpc 写入大量的数据,使用 await-tree 来查看 grpc await 的耗时,发现单个请求长达 30s. 一次请求写入数据量为 14M.
看你描述里提到了lock,加上系统挂死,没有看到你的代码,只是作为一个占星师来说:你排除了死锁吗?同步锁在异步环境里用的坑排除了么?
评论区
写评论可以参考 https://tokio.rs/tokio/tutorial/spawning#accepting-sockets 把耗时操作用tokio::spawn放到其他线程执行
恩恩,感谢回复。消息传递带来的代码复杂度有点高
--
👇
songzhi: tokio::sync::Mutex 的性能不一定好,这点在它的文档里有说。所以你得衡量一下你的需求,如果std::sync::Mutex也能满足,说不定用后者性能会更好。或者不用锁,用消息传递试试。
tokio::sync::Mutex 的性能不一定好,这点在它的文档里有说。所以你得衡量一下你的需求,如果std::sync::Mutex也能满足,说不定用后者性能会更好。或者不用锁,用消息传递试试。
试过,一般 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,加上系统挂死,没有看到你的代码,只是作为一个占星师来说:你排除了死锁吗?同步锁在异步环境里用的坑排除了么?
有用 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,加上系统挂死,没有看到你的代码,只是作为一个占星师来说:你排除了死锁吗?同步锁在异步环境里用的坑排除了么?
代码中主要链路使用的都是 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,加上系统挂死,没有看到你的代码,只是作为一个占星师来说:你排除了死锁吗?同步锁在异步环境里用的坑排除了么?
看你描述里提到了lock,加上系统挂死,没有看到你的代码,只是作为一个占星师来说:你排除了死锁吗?同步锁在异步环境里用的坑排除了么?