败犬日报 2024-10-15
1. 有没有精度较高的实现监听文件是否被修改的实现
inotify 或 ebpf。
2. std::unordered_map 可以单线程写多线程读吗
读和写同时发生就崩了。
有多线程需求的话建议 boost::concurrent_flat_map,或者 absl / folly 之类的库里摸一个出来。
或者 clickhouse::PartitionedHashTable。
或者 tbb。
3. malloc 怎么保证线程安全
考虑 glibc 的 malloc,主要是使用互斥锁(mutex)。
内存分配区域(arena)是系统内部分配的大块内存(使用 brk 或 mmap 系统调用),由一个互斥锁管理;在检测到互斥锁竞争时会创建额外的内存分配区域。
这样可以减少了互斥锁的竞争,可以提高性能。
4. python lambda 捕获
py
a = 1
f = lambda: a
a = 2
print(f())
结果是 2。lambda 在调用时才会查看 a 的值。
另一种解释是,lambda 不直接捕获 a,捕获的是 locals()
(即 local 变量组成的字典)。