Swoole 源码分析2 - 线程锁的封装
Swoole 中对于线程锁的封装位于 'src/lock' 目录,很明了地实现了互斥锁、读写锁、自旋锁三种,结构非常简单。
非淡泊无以明志 非宁静无以致远
Swoole 中对于线程锁的封装位于 'src/lock' 目录,很明了地实现了互斥锁、读写锁、自旋锁三种,结构非常简单。
协程的核心就是上下文切换,故以此为 Swoole 源码分析的开篇。Swoole 与 Fiber 都采用了 boost 库中协程上下文切换( context switch )的实现代码,在这一点上三者完全相同。
老早以前就想写这篇文章了,奈何一直觉得自己对 PHP 内核源码和协程概念了解的都还不够透彻,加之 PHP 世界确实比较少谈论包括协程在内的并发解决方案,所以一直搁置。今天把拖延症治疗一下,顺便再立个 flag : 后续陆续写一系列 PHP 源码分析、 Opcache / Swoole 等扩展源码分析的文章,作为学习笔记,加油!
刚好最近有需要编写安卓端的可执行二进制文件,以便在安卓端直接通过 shell 调用执行。官方推荐使用 Android Studio 进行开发,但是个人感觉再装一个 IDE 很麻烦,其次我不清楚 Android Studio 除了用来做 jnilibs ,能不能编译和调试二进制文件。(碰巧看到这里又知道情况的朋友可以留言告诉我一下,感谢!)所以我研究了一下怎么直接用 Clion 来编写并通过 adb 远程调试。
每次查 Linux API ,要么用 man 要么 google 查在线版进去看,其中在线版使用 man7.org 最多,排版护眼排名也最靠前。但如果使用 Zeal 的话一定会更快,且离线版本没有网络的时候也能查。 Zeal 可以认为是开源简化版 Dash ,后者是 Mac 专属付费应用,但两者离线文档格式都是 docset 。
还记得刚开始看 Go 语言官方 time 标准库文档,翻看时间处理模块的时候,有点摸不着头脑。尤其是时间解析、时间格式化,因为全文比较长,得页面搜索 format 、 parse 之类的关键字查看。
前段时间遇到了一个问题,采用 Let’s Encrypt 证书部署 https 的网站,唯独在 IOS 平台访问极慢,会卡个三五秒空白页。通过查询发现,有人遇到过一样的问题,原因是 IOS 平台会在用户通过 https 协议访问网站时,实时校验证书状态(据称 MacOS 也会,博主手上没有设备)。
在学习和使用 Go 语言的过程中,遇到了一些需要注意下的疑惑点,依次记录一下。这些疑惑点,大都与 Go 语言的内存组织方式有关,理解之后其实也很自然,写博客的时候反倒疑惑开始学习时为啥感到疑惑了...
译者注:GOPATH 和目录组织现在有了更多选择,请查看: Go Modules 。感觉这篇官方文档成文比较早了,有些地方可能已经过时没更新,但是博主认为此文依旧值得一看。原文地址: How to Write Go Code
Go 语言的声明语法比较“别致”,博主学习的时候看到官方的“安利”博文感觉写的很好也很有意思,能帮助理解其规律,以避免在遇到 Go 语言的复杂声明的时候犯错,顺道翻译了一下。