[翻译]Go 的竞态检测器

理解竞态对于并发编程来说很重要,如果能通过某种手段来了解程序中存在的竞态,以便进一步的调整避免竞态,也是非常有效的优化手段。Go 1.1 的工具链引入了竞态检测器可以检测并展示程序中存在的竞态情况。Go 团队撰写了博文详细介绍了这一工具的原理和使用。原文在此《Introducing the Go Race Detector》。 ————翻译分隔线———— Go 的竞态检测器 Dmitry Vyukov 和 Andrew Gerrand 竞态条件几乎是最为隐蔽和难以发现的程序错误。它们通常会导致诡异且无法解释的错误,尤其是在代码已经部署到生产环境很长时间之后。虽然 Go 的并发机制使得编写清晰的并发代码变得容易,但是它们无法避免竞态条件。认真、勤快的测试是必须的。而工具可以给予帮助。 我们很高兴的宣布 Go 1.1 包含了竞态检测器,一个用于发现 Go 代码中的竞态条件的新工具。它当前在 64 位 x86 处理器的 Linux、MacOS 和 64 位 x86 处理器的 Windows 系统中可用。

用Go实现异步的Web开发

不知道大家还记得不记得大约一年前,我的一个白日梦《关于Web编程异步模型的白日梦》,然后这个白日梦我又连续做了好几天《Web编程异步模型的PHP原生实现》、《Web编程异步模型的 Gearman 实现(残)》。 当时怎么也没相通,还死皮白赖的粘在PHP的异步实现上不肯放手。好吧,实现是繁琐的,应用是成功的,代码是容易写的,环境是要搭建的…… 昨晚睡觉前突然觉得自己应该真正用Go实现一下异步的Web,哪怕是个例子也好啊。于是,边吃饭,边敲了一票代码搞了一个很简单的demo,分享给大家吧。在这里下载完整的代码:webdemo。

Web编程异步模型的 Gearman 实现(残)

写了 PHP 原生的二段式异步模型的实现,我就想着用 Gearman 实现一个 callback 方式的异步。还没准备好怎么去写,就看到了靓文一篇《Gearman 心得》。 看过之后,甚感压力:好文!!于是,弃笔不写,洗洗睡罢了…… 补充一下,在“心得”文中仅仅说明了不阻塞的后台作业。对于异步获取数据并未说明。所以我这里罗嗦一下…… worker 如果用 php 来实现,并且不用《Web编程异步模型的PHP 原生实现》中的异步方式,是无法实现 php 的 client 的异步的。比较好的实现方式是 worker 不使用 php,用 python、perl 或者 c,实现一个线程池来执行 job。当然,私下觉得用 stackless python 可能是更好的选择。 2010年07月18日补充: 好吧,终于有人撰文,正好可以补充完整这个异步思路: 淺談coroutine與gevent 就他了,太棒了!

Web编程异步模型的PHP原生实现

这是基于上一篇随笔:关于Web编程异步模型的白日梦的实现。这一思路我记得在 05 年还是 07 年的时候就在 ChinaUnix 上有高人所讨论,只是自己当时愚钝未能明晰本质,纠结于 PHP 的多线程之中…… 这个实现写好有段时间了,最近琐碎的事情很多,一直没有整理出来。今日得闲记录下来。 利用PHP自带的 stream_select 函数实现异步,利用这个函数使得 PHP 原生支持的异步调用实现,无须第三方服务或库。不过只能实现二段式异步调用,就是说会有明显的 Begin 和 End 两个阶段。

关于Web编程异步模型的白日梦

早上刷牙,处于半睡状态。突然想起昨天晚上看到的那个 go-lang 的 MVC 框架,若使用 go func() 方式异步获取数据,应当是不错的。窃喜……梦醒…… 在地铁上被前前后后那些特种男女逼到车角,无奈。又想起早上那个白日梦,遂上网搜索了一番。得老赵的佳作一篇《F# 与ASP.NET(1):基于事件的异步模式与异步Action》。之前看过,由于对微软无爱,未能细品。今日一读,如醍醐灌顶,豁然开朗。 遂整理思路如下,以待后用。