William A

最新文章

由 PHP Fiber 引发的思考

由于水平有限,可能有些术语并不是那么准确。 PHP 8.1的新特性Fiber,可能让很多PHPer误解了,以为Fiber的出现可以解决PHP生态的很多问题,如官方多线程方案的缺失、PHP-FPM多进程阻塞模型的优化。但实际上Fiber目前解决的问题并不多,只是在底层引入了用户栈空间切换的原语,并不能像进程和线程那样,在同步阻塞时,仍然可以在操作系统层面进行上下文切换,不至于让整个程序无法往后执行。 …

算法中的哨兵

在地面上有200个箱子连续排列着,现在需要看一下前面100个箱子中有没有苹果。一般情况下,会怎么做呢? 下面用代码来模拟一下。 package main import ( "fmt" ) func main() { s := make([]int, 200) for i := 0; i < 100; i++ { if s[i] == -1 { …

纯手工打造一个 JSON 解释器

老早就想搞一个完整的解释器,不过呢,通用语言的解释器比较庞大,不太好写。写一个 JSON 解释器比较合适,要素不多,好掌握一点,而且在忽略一些细节之后,代码量极少,对于入门者了解解释器甚至编译器到底在干什么很有帮助。 根据 https://www.json.org 的介绍,JSON 由以下结构组成: object: 无序的 name/value 键值对,以{开始,以}结束,name 后跟着 …

给 PHP 写 C 扩展

前期准备 源码编译安装 PHP。本文使用的是 PHP-8.1,其它版本可能会有所差异。 $ # 获取 PHP 源码并编译 $ git clone https://github.com/php/php-src.git $ git checkout PHP-8.1 $ cd php-src $ ./buildconf $ ./configure $ make $ make install 生成扩展基本 …

网卡与路由器

整理自:网卡与路由器 TODO: 以下只是梗概 DHCP 网卡都有一个全球唯一的地址,这个地址在网卡制造时就是确定的,称为 MAC 地址。如:11:27:F5:8A:79:54。 电脑初接网络时,需要确定 IP 地址,由 DHCP(动态主机配置协议)分配。 但是电脑刚接入网络,不知道 DHCP 在哪里,如何配置?操作系统在应用层创建 DHCP 发现报文,由 UDP 报文封装,再被 IP 数据报封 …