< 返回版块

nujz 发表于 2021-06-27 11:58

Tags:async-std

impl TaskId {
    /// Generates a new `TaskId`.
    pub(crate) fn generate() -> TaskId {
        // TODO: find a good version to emulate u64 atomics on 32 bit systems.
        static COUNTER: AtomicUsize = AtomicUsize::new(1);

        let id = COUNTER.fetch_add(1, Ordering::Relaxed);
        if id > usize::max_value() / 2 {
            std::process::abort();
        }
        TaskId(id)
    }
}

服务器程序运行足够久后,会因为 std::process::abort() 而退出。

评论区

写评论
asins 2022-11-24 17:43

这事是Rust中分支逻辑的严谨性。

johnmave126 2021-06-27 14:43

这个条件在64位服务器上需要创建超过263,也就是约1018个task以后才会触发。这是个什么概念呢,nginx单实例最大qps也就80k左右,假设一个rust程序每秒创建100k,也就是105个task,需要1013秒才会触发abort,也就是316887年。这么长的时间,可能要担心的不止一个abort

1 共 2 条评论, 1 页