Go 语言并发编程系列教程(三):Go 协程通信实现(上)—— 共享内存

在上篇教程中,我们已经演示了如何通过 goroutine 基于协程在 Go 语言中实现并发编程,从语法结构来说,Go 语言的协程是非常简单的,只需要通过 go 关键字声明即可,难点在于并发引起的不确定性,以及为了协调这种不确定性在不同协程间所要进行的通信,在并发开篇教程中,我们也介绍过在工程上,常见的并发通信模型有两种:共享内存和消息传递。 下面,我们先来看看如何通过共享内存来实现 G...

因网络问题导致 Go 语言依赖包下载慢或失败的几个解决方案

Go 语言由 Google 公司开发,由于众所周知的原因,托管 Go 语言包的某些域名可能在国内被屏蔽,比如 golang.org、google.com 等,因此,当我们下载托管在这些域名的包时,会出现网络问题导致的下载失败,以 google.golang.org/grpc 这个包为例,当我们下载它时,会出现如下错误提示: 即: Fetching https://google.gola...

Leetcode基础刷题之PHP解析(128. Longest Consecutive Sequence)

其实这道题还是好理解的,如果是空直接返回0,否则可以先给数组排序,这样的话只需要遍历整个有序的数组,如果当前数和上一个数值一样的,不需要增加他的最长的长度,啥都不用处理,否则的话,只有两种情况,要么当前比上一个大1,要么不是,如果当前是等于上一个数+1,我们就更新当前最长的序列长度,否则的话我们就更新全局最长的长度,然后把当前最长的长度序列重新赋值。...

Go 语言并发编程系列教程(二):Go 协程实现原理和使用示例

Go 并发编程原理 Go 语言的协程实现被称之为 goroutine,由 Go 运行时管理,在 Go 语言中通过协程实现并发编程非常简单:我们可以在一个处理进程中通过关键字 go 启用多个协程,然后在不同的协程中完成不同的子任务,这些用户在代码中创建和维护的协程本质上是用户级线程,Go 语言运行时会在底层通过调度器将用户级线程交给操作系统的系统级线程去处理,如果在运行过程中遇到某个 IO...

Go 语言并发编程系列教程(一):多进程、多线程与协程的引入

为什么需要并发编程 在原生 PHP 中并没有并发的概念,所有的操作都是串行执行的、同步阻塞的,这也是很多人诟病 PHP 性能的原因,但是不支持并发编程的好处也是显而易见的:保证了 PHP 的简单性,开发者不必考虑并发引入的线程安全,也不需要在编程时权衡是否需要通过加锁来保证某个操作的原子性,也没有线程间通信问题,鱼和熊掌不可得兼,你不可能既要上手简单又要高性能,实际上,90%以上公司的业...

基于 Laravel + Swoole + Vue 搭建实时在线聊天室(一):环境准备篇

项目概述 今天开始,学院君将带领大家基于 Swoole 搞个「大项目」 —— 开发在线聊天室,当然还是在 Laravel 框架中,前端 UI 还是基于 Vue 组件实现,本项目主要涉及以下技术: 基于 Laradock 本地开发环境进行演示和测试 后端基于 Laravel 5.8 + LaravelS 扩展包引入对 Swoole 的支持 基于 Swoole 提供的 WebSocket ...

Leetcode PHP题解--D115 506. Relative Ranks

D115 506. Relative Ranks 题目链接 506. Relative Ranks 题目分析 给定一个积分表,对前三名显示Gold/Silver/Bronze Medal,剩余的直接显示名次。 思路 首先保留索引给积分表排序,再用range生成名次把前三条替换成指定文字。之后使用array_combine和ksort把两者结合就好了。 最终代码 ...

Go 语言错误及异常处理篇(三):panic 和 recover

前面学院君介绍了 Go 语言通过 error 接口统一进行错误处理,但这些错误都是我们在编写代码时就已经预见并返回的,对于某些运行时错误,比如数组越界、除数为0、空指针引用,这些 Go 语言是怎么处理的呢? panic Go 语言没有像 PHP 那样引入异常的概念,也没有提供 try...catch 这样的语法对运行时异常进行捕获和处理,当代码运行时出错,而又没有在编码时显式返回错误时,...