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()
而退出。
1
共 2 条评论, 1 页
评论区
写评论这事是Rust中分支逻辑的严谨性。
这个条件在64位服务器上需要创建超过263,也就是约1018个task以后才会触发。这是个什么概念呢,nginx单实例最大qps也就80k左右,假设一个rust程序每秒创建100k,也就是105个task,需要1013秒才会触发abort,也就是316887年。这么长的时间,可能要担心的不止一个abort