How Many Hours for Multithreading the Server? - Bert Hubert's writingsa day agohttps://berthub.eu/articles/posts/how-many-hours-for-multithreading/对于全新的项目,开发者很难精确估算每个小时的工作量;提供留有余地的估算又会导致日程冲突。项目经理要求细致的估算,往往是为了推卸责任并避免自身承诺,这通常源于不安全感。与其分解到每小时,不如识别出双方的'等待节点'——即每一方必须交付的环节(如规格、内容、审批等)。迫使对方承诺其截止日期和交付物,让对方也承受开发者所面临的时间压力。拥有强项目直觉的开发者可以用灵活性换取免于微观截止日期的压力。这种方法要求开发者已具备完成主要里程碑(如UI演示截止日期)的能力。
C++ iostreams: Unexpected but legal multithreaded behaviour - Bert Hubert's writingsa day agohttps://berthub.eu/articles/posts/iostreams-unexpected/调用 `std::ios_base::sync_with_stdio(false)` 不仅会禁用 C 标准 I/O 同步,还会取消标准 iostream 对象的线程安全性。绑定的流(例如 `cin` 绑定到 `cout`)会导致隐藏的写操作:从 `cin` 读取时会刷新 `cout`,从而产生并发访问,即使只有一个线程直接写入 `cout`。为避免单线程 `cout` 使用中的隐藏并发写入,可使用 `cin.tie(nullptr)` 解除绑定。即使同步流也可能产生交错输出;多个 `<<` 操作不具备原子性保证,因此需要用户级锁定来实现清晰的输出。对于多线程程序,最安全的方法是保持流同步(即避免使用 `sync_with_stdio(false)`)并用互斥锁保护所有输出。
Releasing Execution Contexts [Crystal]14 days agohttps://crystal-lang.org/2026/07/12/releasing-execution-contexts/Crystal中的执行上下文支持多种纤程编排模式:并发(单线程上的并发)、并行(跨核心的并发与并行)以及隔离(纤程独占线程)。默认执行上下文为并行模式,并行度为1,这避免了破坏性变更;它可根据需要调整以实现真正并行,或保持并发模式。纤程可通过Channel和Sync类型跨上下文通信,但跨上下文通信可能因同步开销增加而变慢。执行上下文解决了预览版多线程模型中的问题(如纤程因繁忙线程而阻塞),允许纤程切换线程,且调度器可在阻塞系统调用时转移线程。破坏性变更包括:并行上下文中纤程可能切换线程、阻塞系统调用时调度器会切换线程,以及spawn(same_thread: true)参数已被弃用。