关于对「Don't communicate by sharing memory, share memory by communicating」的理解

Golang编程谚语(Proverbs)中有这么一句: Don’t communicate by sharing memory, share memory by communicating. 即:不要使用共享内存通信,用通信来实现数据的共享。 首先 Go 的并发原语 (goroutines 和 channels) 为构造并发软件提供了一种优雅而独特的手段. Go 鼓励使用 channels 在 goroutines 之间传递对数据的拷贝, 而不是显式地使用锁来调解对共享数据的访问. 这种方法确保只...

五月 20, 2024 · 4 分钟 · 1803 字 · ZhangYong

学习开发一款PHP拓展

前置学习 如果我问你,PHP拓展的执行效率比PHP原生代码更高吗? 你会不假思索的回答我。是的。 但是,为什么呢?为什么用C/C++开发的拓展效率就一定高呢? 如果你问Chat-GPT4,它会回答: 编译型语言:PHP扩展通常使用C或C++编写,这些都是编译型语言,编译成机器码后执行效率高...

七月 13, 2023 · 7 分钟 · 3395 字 · ZhangYong

概述PHP、Swoole和Hyperf(个人理解版)

PHP-FPM 1.1 传统Nginx+FPM架构 1.1.1 PHP-FPM 并发模型 图1.1.1 一个HTTP请求的流转过程在网络应用场景下,PHP并没有像Golang那样实现http网络库,而是实现了FastCGI协议,然后与web服务器配合实现了http的处理。 web服务器来处理http请求,然后将解析的结果再通过Fa...

六月 9, 2023 · 9 分钟 · 4452 字 · ZhangYong

Golang 数组与切片

数组和切片的异同 数组是定长的,是一片连续的内存,其长度是类型的一部分,定义好之后就不能再更改,比如 [3]int 和 [4]int 就是不同的类型。 所以在日常开发中,我们更多使用的是切片(slice)。 slice 实际上是一个结构体,包含三个字段:长度、容量、底层数组,可以动态扩容,更加灵活。 // runtime/slice.go type slice struct { array unsafe.Pointer // 元素指...

一月 19, 2023 · 3 分钟 · 1412 字 · ZhangYong

PHP的那些「坑」

使用引用变量foreach数组,未unset问题 foreach数组是引用传递变量,未unset导致再次foreach末尾元素值被覆盖 https://www.cnblogs.com/sunshineliulu/p/12853531.html in_array严格检查问题(PHP8之前) bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] ) 在 haystack 中搜索 needle,如果第三个参数 strict 的值为 true,则 in_array 函数还会检查...

一月 5, 2023 · 2 分钟 · 510 字 · ZhangYong

Go中的指针和二级指针

Go语言指针基础 什么是指针 简单来说指针是存储另一个变量的内存地址的变量。 在上图中,变量 b 的值被定义为252并存储在内存地址 0x1040a124 上。 变量 a 保存 b 的地址,现在 a 指向 b。 声明指针 package main import ( "fmt" ) func main() { b := 252 var a *int = &b fmt.Printf("a 的类型为:%T\n", a) fmt.Println("b的地址...

十一月 28, 2022 · 5 分钟 · 2121 字 · ZhangYong

Golang中defer函数的使用

基本概念 defer 是 Go 语言中的一个关键字,用于延迟(推迟)一个函数或方法的执行,直到包含它的函数执行完毕时才会被调用,无论包含它的函数是通过 return 正常结束还是由于 panic 导致的异常结束。 defer 语句通常用于资源的释放、解锁以及确保某些关键操作的完成。 参数求值与陷阱 在 Go 中,defer 语句中的函数参数会在 defer...

八月 8, 2022 · 2 分钟 · 860 字 · ZhangYong

基于Redis的分布式锁算法RedLock及RedLock-Hyperf实现

前言 最近项目需要在Hyperf框架下封装Redis分布式锁,于是基于RedLock算法封装了 RedLock-Hyperf SDK,目前除支持简单对象调用外,也支持在Hyperf框架下通过AOP注解来实现。 基于Redis实现一个分布式锁,相信这对你来说并不是难事。多数人会使用 setnx + expire + del 命令来实现一个简单的分布...

三月 18, 2021 · 8 分钟 · 3725 字 · ZhangYong

Hyperf为什么要关闭Swoole协程短名称

在Hyperf官方文档的服务器要求中提到 Swoole PHP 扩展 >= 4.5,并关闭了 Short Name 并且,在文档的常见问题中也会看到Swoole 短名未关闭这一个tag。 我想问了,那为什么hyperf一定要关闭掉Swoole的协程短名称呢 首先,我们先看一下什么是Swoole的协程短名称 所有的 Swoole\Coroutine 前缀的类名映射为 C...

一月 12, 2021 · 2 分钟 · 860 字 · ZhangYong

Hyperf/Crontab 组件源码解析

前置阅读:Hyperf/Crontab使用文档 前置阅读:Hyperf/Process自定义进程使用文档 前置阅读:Hyperf事件机制 写在开头 之前做项目用到了Hyperf/Crontab组件来进行秒级的数据清洗,最近又在做定时任务的拆分,于是就打算过一遍组件源码加深理解,顺便构思一...

六月 2, 2020 · 4 分钟 · 1895 字 · ZhangYong