自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 PHP5.4.x至PHP7.1.x的新特性

5.4.x 到 5.5.x 新特性: 1. 新增 Generators Support forgeneratorshas been added via theyieldkeyword. Generators provide an easy way to implement simple it...

2019-09-23 17:20:04

阅读数 12

评论数 0

原创 yii2.0框架

图片生成有"yiisoft/yii2-imagine": "~2.1.0", 库, 安装: sudo curl -O ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick.tar.gz extens...

2019-08-17 15:40:33

阅读数 11

评论数 0

原创 Linux下安装php7.0,php7.1,php7.2,php5.6; 安装扩展xdebug-2.7.2; 安装扩展redis-4.3.0;(怀疑人生的一次安装经历!)

./configure --enable-fpm --prefix="/alidata/server/php7.0.33" --with-config-file-path="/alidata/server/php7.0.33/etc/" --with-gd ...

2019-05-28 11:30:59

阅读数 122

评论数 0

原创 Go并发模式/设计模式-重启异常的goroutine

在长期运行的后台程序中, 如果没有外部干涉,一个goroutine 很容易进入一个不正常的状态,并且无法恢复。 在一个长期运行的程序中,建立一个机制来 监控 goroutine 是否 是健康的的状态 是有用的, 当它们变得异常时, 就可以重启。我们将这个重启goroutine 的过程称为 &quo...

2019-05-04 22:11:06

阅读数 113

评论数 0

原创 Go并发模式/设计模式之速率限制(API速率限制)

速率限制;它限制了某种资源在某段时间内 被访问的次数。 资源可以是任何东西: API连接, 磁盘读写, 网络包, 异常。 通常情况下 用户对系统的访问应当 被沙盒化,既不会影响其他用户的活动, 也不会受到其他用户的影响。 访问 收费系统 时, 速率限制可以使你与客户保持良好的关系。Google...

2019-05-03 21:01:00

阅读数 95

评论数 0

原创 Go并发模式/设计模式之复制请求

复制请求 程序正在处理 用户的HTTP请求, 或者检索一个数据块。你可以将请求分发到多个处理程序(无论是 goroutine ,进程, 还是服务器),其中一个将比其他 处理程序返回更快,可以 立即返回结果。 下面例子 在 单个进程中, 使用多个goroutine 作为处理程序。 goroutine...

2019-05-02 17:34:31

阅读数 40

评论数 0

原创 Go并发模式/设计模式之心跳

心跳是 并发进程向外界发出信号的一种方式 两种不同类型的心跳: 1。 在一段时间间隔内发出的心跳 2。 在工作单元开始时发出的心跳。 func main() { doWork := func(done <-chan interface{}, pulseInterval tim...

2019-04-30 23:27:03

阅读数 64

评论数 0

原创 Go并发模式之异常

出现异常表示着 系统 进入了 一个无法满足用户操作的状态,这个操作可能是显式的, 也可能是隐式的。 这是需要传达一些信息: 1。 发生了什么 : 对异常事件的描述 2。 发生在什么时间, 什么位置 : 异常还应该包含 栈轨信息;异常还应包含对应机器上时间,并最好utc 时间。 3。 对用户友...

2019-04-21 19:59:41

阅读数 43

评论数 0

原创 Go并发模式之context(比done channel 更加强大)-取消goroutine的好的解决方案

在并发程序中, 由于超时、取消、或系统的其他部分的故障 往往需要抢占操作。 done channel 可以在你的程序中流动并取消所有阻塞的并发操作。 看起来不错,但是还不完美,还不是很够用。 什么样的功能还需要呢?什么样功能才算完美呢? 如果我们可以在简单的通知上附加传递额外的信息; 如 为什么取...

2019-04-19 19:36:53

阅读数 210

评论数 0

原创 Go并发模式之队列

带缓存的 channel, 其实就是一种队列。 引入队列,通常是优化程序时希望采用的最后一种技术之一。预先添加队列可以隐藏同步问题,例如死锁,和活锁。 常见错误认识: 引入队列来尝试解决性能问题,队列几乎不会加速程序的总运行时间,它只会让程序的行为有所不同。 举例如下: 图 todo 看看...

2019-04-09 23:40:46

阅读数 45

评论数 0

原创 Go并发模式之桥接channel(bridge channel)

作为channel 消费者 不关心其值来自一系列的channel的事实。这种情况下处理一个充满channel的 channel这种情况很多。 我们可以做的是 : 将充满channel的channel 拆解为一个简单的channel func main() { bridge := func(d...

2019-04-07 17:34:41

阅读数 42

评论数 0

原创 Go并发模式之将channel一分为二(tee channel)

想把一个channel 一变二;以便 将它们发送到 代码的两个不同独立区域中。 func main() { tee := func(done <-chan interface{}, in <- chan interface{})( <-chan in...

2019-04-06 23:47:57

阅读数 29

评论数 0

原创 Go并发模式之如何很好很强大读取channel(orDone函数)

我需要从 一个channel中读取数据; 这个channel 我不能对他行为(如: 什么时候被close(),被取消)做出假设, 可以 range 读取(但是 总要判断 true 才能使用他返回的值,不爽!); for val := range myChan{ //用val 执行某些操作 }...

2019-04-06 23:12:14

阅读数 58

评论数 0

原创 Go并发模式之pipeline(管道)

pipeline pipeline 是你可以用来在系统中形成抽象的另一种工具。特别是当程序需要流式处理 或批处理数据时,它是一个非常强大的工具。 pipeline 只不过是一系列将数据输入, 执行操作并将结果数据传回的系统。 将这些操作称为 pipeline 的一个 stage. 通过使用...

2019-04-06 21:35:21

阅读数 158

评论数 0

原创 Go并发模式之 错误处理

不好的处理错误方式,或者说 没有进行错误处理的例子: func main() { checkStatus := func(done <-chan interface{}, urls ...string) <-chan *http.Response{ respo...

2019-03-26 22:58:02

阅读数 82

评论数 0

原创 Go并发模式之 防止goroutine泄漏

goroutine 有以下几种方式被终止: 1。 当他完成了它的工作。 2。 因为不可恢复的错误, 它不能继续工作 3。 当他被告知 需要终止工作。 我们可以简单的使用前两种方法, 因为这两种方法隐含在你的算法中, 但"取消工作" 又是怎样工作的呢? 例如:这样情况: 子g...

2019-03-17 23:22:58

阅读数 208

评论数 0

原创 Go并发模式之 for-select

for - select for{ //要不就无限循环,要不就使用range 语句循环 select{ //使用channel进行作业 } } 以下情况使用 for-select 向channel 发送迭代变量 ---for select for _, s :...

2019-03-17 18:14:39

阅读数 67

评论数 0

原创 Go并发模式之 约束

约束: 在编写并发代码的时候,有以下几种不同的保证操作安全的方法。 1。 用于共享内存的同步原语(如sync.Mutex) 2. 通过通信来 共享内存来进行同步(如 channel) 在并发处理中还有其他几种情况也是隐式并发安全的: 3。 不会发生改变的数据 4。 受到保护的数据 约束: 特定约...

2019-03-17 17:58:20

阅读数 41

评论数 0

原创 Go并发原语/并发组件/go并发核心语法 之select

select 语句是 将各种channel 绑定在一起的粘合剂; 连接各种组件在一起; select 语句可以帮助安全地将channel 与诸如取消,超时,等待和默认值之类 的概念结合在一起。 与 switch 块不同, select 块中的case 语句没有测试顺序,如果没有满足任何条件,执行...

2019-03-16 23:31:22

阅读数 37

评论数 0

原创 Go并发原语/并发组件/go并发核心语法 之channel

channel: 虽然 他们可以用来同步内存访问; 但他们最好用于在 goroutine 之间传递信息。 命名: 像河流一样,一个channel充当着信息传送的管道,值可以沿着channel传递,然后在下游读出。由于这个特点,通常使用"stream" 来做 ...

2019-03-16 23:14:54

阅读数 43

评论数 0