正所谓“说曹操曹操到”吧,这世间的很多事儿着实架不住念叨。上文书我们刚提到一个“活久见”bug,如今又和他的表妹不期而遇了。
相遇过程如下:
在已经被本地化的产品中选择Preview,Schedules等tab,日文UI无任何异常。

紧接着点击Downloads tab,注意!这里的页面发生了局部刷新,然后我们就猝不及防的看到这样日文和英文夹杂着的怪咖。

对于该问题,测试和开发的确是大费周章,以至于极度怀疑是因为性能负载问题导致了产品的功能异常,为此还特意引入了JMeter,也进行了不止一次的高并发测试来确定病根。

从这张并发测试图上我们可以依稀的看出,那时开发和测试那无助的眼神和表情,但这样的测试结果依旧是然并卵的。
读过上篇文章的同学应该大抵能想到这种情况多半是由于线程安全引发的了吧。确实如此,虽然技术实现上并不完全相同。首先这里不是用Python实现,而是C#,所以自然没有了@classmethod,但[ThreadStatic]又是何等的异曲同工。(示意代码中展示就是真凶的正面照)
[ThreadStatic]
private static IGlobalizationContext _context;
线程安全与全球化:ThreadStatic与g11n Context问题解析

博客讨论了一个在多线程和国际化环境下出现的bug,涉及到C#中的[ThreadStatic]属性。当页面局部刷新时,由于线程安全问题,导致全局化上下文(g11n context)错乱,出现日文和英文混杂的情况。文章通过并发测试验证问题,并解释了[ThreadStatic]如何在多线程中为每个线程提供独立的静态变量。异步方法导致IIS在处理请求时可能切换线程,从而破坏了context的一致性。为解决这个问题,提出了修复方案,确保全球化逻辑的线程安全。最后,作者建议在代码审查中,一旦发现g11n context与ThreadStatic相关联,可以直接视为潜在bug。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



