更精准的sleep

书接上回。昨天我写了一篇《这个限流库两个大bug存在了半年之久,没人发现?》,提到了Go语言中的time.Sleep函数的问题。有网友也私下和我探讨,提到这个可能属于系统的问题,因为现代的操作系统都是分时操作系统,每个线程可能会分配一个或者多个时间片,Windows默认线程时间精度在15毫秒,Linux在1毫秒,所以time.Sleep的精度不可能那么高。

本文原文有误导,结论部分正确,我在文章末尾作了更正

阅读全文

iptables 以及 Go操作库

iptables 是 Linux 系统中的一个非常强大的防火墙工具,它可以用于过滤、修改、重定向和处理网络数据包。iptables 是基于 Netfilter 框架的,Netfilter 是 Linux 内核的一部分,它提供了在内核级别处理网络数据包的能力。

阅读全文

Rust并发编程5 - 基本并发原语

同步是多线程程序中的一个重要概念。在多线程环境下,多个线程可能同时访问某个共享资源,这就可能导致数据竞争或者数据不一致的问题。为了保证数据安全,需要进行同步操作。

常见的同步需求包括:

  • 互斥:线程在使用共享资源时,同一时刻只允许一个线程访问共享资源,在一个线程使用时,其他线程需要等待,不能同时访问,需要互斥访问。
  • 限制同时访问线程数:对某些共享资源,可能需要限制同一时刻访问的线程数。
  • 线程间通信:一个线程需要基于另一个线程的处理结果才能继续执行,需要线程间通信。
  • 有序访问:对共享资源的访问需要按某种顺序进行。

阅读全文

不看就落后了,Go 1.22 中更好的http router

很多人为了使用Go web中更好的路由,会使用第三方的库 httprouter、gorilla/mux等。在明年的春节左右发布的Go 1.22中,Go官方终于对标准库中的http.ServeMux下手了,对它的功能进行了优化,终于可以抛弃第三方库了。

一个令人兴奋的提案预计将在Go 1.22中实现—— 增强标准库net/http包中默认HTTP服务多路复用器的模式匹配能力。

阅读全文