0%

背景

最近在开发一个golang reactor模型的网络库,底层采用epoll多路复用网络IO。我编写了一个测试脚本用于对程序进行压测,压测脚本的内容是运行一个tcp client,client会大批量的向server发送数据包,但是当我进行实测的时候,奇怪的现象发生了,一旦我运行一个压测脚本几秒后,其他后续的测试脚本就无法再与服务端建立连接,报错如下:

1
Error connecting: dial tcp 127.0.0.1:10101: connect: connection refused
阅读全文 »

作为Go2设计过程的一部分,我们已经发布了以下三个主题的设计草案用于开启社区的讨论,它们分别是:泛型(generics)、错误处理(error handling)和错误值语义(error value semantics)。

从Go提案流程的意义上说,这些设计草案不是提案。它们是讨论的起点,最终的目标是产生足以被转化为实际建议的设计。

每个设计草案都附有“问题概述”。问题概述旨在提供问题的上下文;为实际的设计文档打下基础,其中当然会提供设计细节;并帮助设计和指导有关设计的讨论。它包含了背景、目标、非目标、设计约束、设计摘要、我们认为最需要关注的领域的简短讨论以及与以前方法的比较。

再次强调,这些是设计草案,而不是最终的方案。我们希望所有Go用户都能帮助我们改进他们并将其转变为Go提案。我们建立了一个Wiki页面来收集和组织有关每个Topic的反馈。请帮助我们使这些页面保持最新状态,包括添加指向您自己的反馈的链接。

阅读全文 »

NIO(Non-blocking I/O),是一种同步非阻塞的I/O模型,也是I/O多路复用的基础,是现今主流的大流量、高并发IO有效解决方案。

五种IO模型

在UNIX下,IO模式分为五类,分别是:阻塞式IO(bloking IO)、非阻塞式IO(non-blocking IO)、多路复用IO模型(multiplexing IO)、信号驱动IO模型(signal-driven IO)以及异步IO模型(asynchronous IO)。其中又以前三种模式最为常见。

阅读全文 »

最近在公司内部进行了一次以Nsq为主题的技术分享,经过稍许的整理,把PPT转作博文呈现。

一、NSQ组件

nsqd
一个负责接收、排队、转发消息到客户端的守护进程
nsqlookupd
管理拓扑信息并提供最终一致性的发现服务的守护进程
nsqadmin
一套 Web 用户界面,可实时查看集群的统计数据和执行各种各样的管理任务
utilities
常见基础功能、数据流处理工具,如 nsq_stat、nsq_tail、nsq_to_file、nsq_to_http、nsq_to_nsq、to_nsq

阅读全文 »

一、基本概念

访问者模式属于设计模式中的【行为型设计模式】,它将行为和具体的数据结构进行了分离。在23种设计模式中,它相对比较复杂,难理解。

二、实现

我们先不探究使用访问者模式的原因,简单来看看访问者模式的实现。
其实访问者模式就像它名字所形容的,可以比喻为多个客人对一个包含多个家庭成员的家庭进行访问,到访的客人会一次和家庭的每个成员进行寒暄,所以它的三个组成要素就是:客人家庭、以及家庭成员

阅读全文 »

一、优先队列(priority queue)基本概念

在对inFlightPqueue进行分析之前,先简单介绍一下优先队列的概念。
我们都知道,队列是一种先进先出(FIFO)的数据结构。而优先队列不再遵循先入先出的原则,而是分为两种情况:
1、最大优先队列,无论入队顺序,当前最大的元素优先出队。
2、最小优先队列,无论入队顺序,当前最小的元素优先出队。

阅读全文 »