< 返回版块

lithbitren 发表于 2022-11-28 15:44

Tags:sleep

在一个系统里大量使用sleep进行任务调度,会有什么坑,sleep能占多少内存cpu?

搜到一篇知乎文章说windows定时器几百任务在秒内唤醒就会导致cpu爆满,如果是并发几万的任务调度,也可以直接用sleep调度吗?

知乎文章:https://zhuanlan.zhihu.com/p/112084101?utm_id=0

评论区

写评论
作者 lithbitren 2022-11-29 22:23

确实,每个系统都挺复杂的,还是得实测

--
👇
fakeshadow: 单个sleep只要几百字节。 量化我觉得要结合实际应用,高并发内存占用计算很困难。像是tcp连接除了系统内存还有用户内存。常见的io都套buffer,甚至多层套buffer,这个占用就只能自己实测了。异步休眠也经常有嵌套的情况。

--
👇
lithbitren: 有没有更量化点的指标,比如一个tcp链接,有人说是8-10k,主要是缓冲区开辟的,结果有人测出平均才3-4k,百万并发仅用3g+内存。 https://zhuanlan.zhihu.com/p/25241630?utm_id=0

不知道这种不涉及网络io的纯休眠tokio协程会是怎样占用内存的,也是想试试实现类似于redis那样的定时任务,是不是在handle里直接休眠就好了,还是专门搞一个时间轮把任务注册进去。 现在想想,handle作为协程挂起来的内存可能也得考虑进去,感觉开销一下子又大了不少。

--
👇
fakeshadow: tokio使用层级时间轮来储存休眠任务,在windows平台上使用iocp来超时阻塞线程的开销也很小,大量并发也能保证性能。简要介绍可以参考https://tokio.rs/blog/2018-03-timers

fakeshadow 2022-11-29 06:14

单个sleep只要几百字节。 量化我觉得要结合实际应用,高并发内存占用计算很困难。像是tcp连接除了系统内存还有用户内存。常见的io都套buffer,甚至多层套buffer,这个占用就只能自己实测了。异步休眠也经常有嵌套的情况。

--
👇
lithbitren: 有没有更量化点的指标,比如一个tcp链接,有人说是8-10k,主要是缓冲区开辟的,结果有人测出平均才3-4k,百万并发仅用3g+内存。 https://zhuanlan.zhihu.com/p/25241630?utm_id=0

不知道这种不涉及网络io的纯休眠tokio协程会是怎样占用内存的,也是想试试实现类似于redis那样的定时任务,是不是在handle里直接休眠就好了,还是专门搞一个时间轮把任务注册进去。 现在想想,handle作为协程挂起来的内存可能也得考虑进去,感觉开销一下子又大了不少。

--
👇
fakeshadow: tokio使用层级时间轮来储存休眠任务,在windows平台上使用iocp来超时阻塞线程的开销也很小,大量并发也能保证性能。简要介绍可以参考https://tokio.rs/blog/2018-03-timers

作者 lithbitren 2022-11-28 23:21

有没有更量化点的指标,比如一个tcp链接,有人说是8-10k,主要是缓冲区开辟的,结果有人测出平均才3-4k,百万并发仅用3g+内存。 https://zhuanlan.zhihu.com/p/25241630?utm_id=0

不知道这种不涉及网络io的纯休眠tokio协程会是怎样占用内存的,也是想试试实现类似于redis那样的定时任务,是不是在handle里直接休眠就好了,还是专门搞一个时间轮把任务注册进去。 现在想想,handle作为协程挂起来的内存可能也得考虑进去,感觉开销一下子又大了不少。

--
👇
fakeshadow: tokio使用层级时间轮来储存休眠任务,在windows平台上使用iocp来超时阻塞线程的开销也很小,大量并发也能保证性能。简要介绍可以参考https://tokio.rs/blog/2018-03-timers

fakeshadow 2022-11-28 16:50

tokio使用层级时间轮来储存休眠任务,在windows平台上使用iocp来超时阻塞线程的开销也很小,大量并发也能保证性能。简要介绍可以参考https://tokio.rs/blog/2018-03-timers

1 共 4 条评论, 1 页