自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zg_hover的专栏

Get buy living or get busy dying!

  • 博客(17)
  • 资源 (6)
  • 收藏
  • 关注

原创 beanstalkd源码分析--事件处理机制

概述本文接着讲述beanstalkd的事件处理机制,这其实也是大多数服务器要实现的步骤。我们且看beanstalkd是如何实现的。源码分析接受客户端连接在主服务函数:void srvserve(Server *s)中初始化时,会把sock.f设置成srvaccept。 该函数主要是用来接受来自客户端的连接请求。voidsrvserve(Server *s){ ...

2018-07-31 07:37:04 411

原创 Beanstalk源码分析--系统初始化

概述本文接上文,继续分析和探讨beanstalk的实现原理。本文对beanstalk的启动过程做一个分析,这样可以对其运行框架有一个总体上的把握。 beanstalkd是使用epoll作为事件处理框架,为什么epoll如此高效,可以参考我以前写的一篇对其实现代码分析的文章。源码分析软件入口beanstalkd的初始化流程代码非常简洁。主要完成各种数据结构的初始化,创建服务器监听s...

2018-07-31 07:28:04 417

原创 Beanstalk源码分析--数据结构设计

概述beanstalk是多年前使用过的一个分布式任务队列,通过C实现,十分高效。和Redis(默认)的事件驱动框架一样,都是通过异步的epoll来实现,所以,能够高效的处理大量请求。 但不知什么原因,作者几年前已经不再维护其代码了。但我发现国内还是有一些人在使用该软件,为了能够更好的理解其运行机制,几年前对其代码进行了一些研究。先把分析的几篇发出来。 另外,我对其代码进行了fork,若有问...

2018-07-31 07:17:51 720 1

原创 Kafka设计原理--生产者和消费者的设计

概述本文说明了Kafka的生产者和消费者的设计原则,通过本文可以了解生产者和消费者的设计原理和思想,为更好的理解Kafka的运行机制打下基础。生产者(Producer)的设计生产则的设计考虑了两个方面:如何实现负载均衡如何提高I/O效率负载均衡生产者(Producer)把数据直接发送到Partition的leader所在的Broker服务器,而不经过任何的路由层。为了...

2018-07-30 08:02:54 1578

原创 Kafka设计原理--性能上的设计考虑

概述本文总结了Kafka的一些设计原则和思想。通过本文,可以了解,为什么kafka的读写性能如此之高,在设计时考虑了那些方面。性能上的设计考虑使用批量传输和读写在效率上Kafka做了很大的努力。它考虑的主要场景是:高吞吐写和高并发读。也就是,在大量的写数据和多方读取数据的场景,kafka尽量使得读和写付出的代价最小。那么,它是如何做到的呢?我们知道,大量小数量的网络I/O和服务...

2018-07-28 22:19:18 302

原创 Go并发编程—sync包之Once

概述Once可以让一个动过只发生一次,不管该动作在多少个协程中执行。这种操作可以用于在多线程编程中只允许运行一次的代码块,或初始化代码块中。函数介绍func (o *Once) Do(f func())Once结构的实现// Once is an object that will perform exactly one action.type Once str...

2018-07-28 08:12:21 740

原创 如何用Go实现一个tcp代理服务器

概述通过linux和C/C++来实现一个代理服务器并不是那么容易,不仅要考虑内存管理和性能,还需要考虑同步和线程/进程管理等问题。为了保证性能,有时候还需要考虑和被代理的服务器保持长连接,这样就需要对链接进行管理。那么使用Go来实现一个代理服务器会如何呢?首先,通过Go来实现后台服务时至少有以下一些优势:协程可随用随起,内存管理和回收不需要自己来做。这样,再加上Go提供的一些工具函数,极大...

2018-07-26 21:36:05 7169

原创 Go并发编程--sync包来实现环形缓冲队列

概述环形缓冲区是另一个十分经典的生产者-消费者模型。其基本思想是:先开辟一块固定的内存作为保存元素(相同类型)的缓冲区,注意是一块固定的内存,开辟后大小就不能再修改了。也可以理解是一个数组。 当生产者往缓冲区中放入元素时,判断是否已经到了该队列的末尾,若到了末尾则应该,绕回到队列的首部放入元素,也就是第0个位置。 而消费者也是类似的操作(当取元素的位置到了队列最后一个,则绕回到第0个位置)...

2018-07-25 23:24:56 1447

原创 GO语言并发编--sync包之WaitGroup的使用

概述WaitGroup用于等待一组线程的结束。父线程调用Add方法来设定应等待的线程的数量。每个被等待的线程在结束时应调用Done方法。同时,主线程里可以调用Wait方法阻塞至所有线程结束。 但在使用时,也有一些问题需要注意,请看本文的详细分解。 另外,WaitGroup的使用场景十分有限,为什么呢?具体原因,请看本文的总结部分的分析。主要函数func (*WaitGroup)...

2018-07-24 23:31:32 15040

原创 通过REST接口来访问Fabric区块链网络

概述​ 通过REST接口来访问区块链网络,可以屏蔽底层区块链网络的复杂性,减低开发Dapp的难度,快速开发基于区块链的应用。​ Fabric官方已经开始提供访问Fabric网络的REST接口,但该接口目前还不是太完善,官方文档明确说明会在后续版本release这些功能。可以参考这里的官方说明。​ 根据官方文档可以看出,到目前为止,release的版本中只提供了node和ja...

2018-07-23 19:43:50 2875 2

原创 centos7.0安装hyperledger fabric-1.1环境(first network)

概述在安装fabric时,对于依赖组件的安装,官方文档写的不是太有条理,导致很多初学者,在安装时遇到很多问题。 本文介绍了fabric在centos7.0系统下安装的全过程,自己亲自动手按这个步骤安装完成,并验证通过,希望对初学者有一定的帮助。安装fabric环境需要以下几步: 1. 安装golang环境 2. 安装docker 3. 安装docker-compose 4. 搭建...

2018-07-18 17:56:09 1292

原创 Go并发编程--goroutine leak的产生和解决之道

概述在Go中,goroutine很轻量级,随便创建成千上万个goroutine不是问题,但要注意,要是这么多的goroutine一致递增,而不退出,不释放资源,就有可能耗尽系统资源。本文介绍goroutine泄露的两种实际场景,并讨论如何解决该问题。其他场景和更加详细的介绍,可以参考我的个人博客。产生原因分析产生goroutine leak(协程泄露)的原因可能有以下几种: * ...

2018-07-18 14:19:27 3261 1

原创 Go并发编程--基于channel信号量来实现互斥锁

概述根据前面的一片文章:《Go并发编程–通过channel来实现信号量原语》我们实现了信号量的基本原语P和V操作,本章介绍如何通过P操作和V操作来实现互斥锁。实现原理当我们把channel的容量设置为1时,P和V操作就变成了,lock和unlock操作。为什么呢?我们来看下代码实现:/* mutexes */func (s semaphore) Lock() { s....

2018-07-15 05:54:46 1106

原创 Go并发编程--通过channel来实现信号量原语

概述信号量是一种用于提供不同进程间或一个给定进程的不同线程间同步手段的原语。对于一个信号量来说,基本的操作有三个:创建一个信号量 创建一个信号量会给该信号量一个初始值,对于二元信号量来说它是1。等待(wait)一个信号量 该操作会测试这个信号量的值,如果其值小于或等于0,就等待(阻塞),一旦其值变为大于0就将它减1。 该操作也被称为P操作,或递减(down),或上锁(lock)。...

2018-07-15 05:24:15 1699

原创 Go并发编程--通过channel实现生产者消费者模型

概述生产者消费者模型是多线程设计的经典模型,该模型被广泛的应用到各个系统的多线程/进程模型设计中。本文介绍了Go语言中channel的特性,并通过Go语言实现了两个生产者消费者模型。channel的一些特性在Go中channel是非常重要的协程通信的手段,channel是双向的通道,通过channel可以实现协程间数据的传递,通过channel也可以实现协程间的同步(后面会有介绍)。本...

2018-07-14 22:56:52 5767 1

原创 Go并发编程--通过channel实现流水线作业模型

概述流水线作业,是多个线程协作,就像加工车间的传送带,每个线程完成一项任务,然后把结果发送给下一个线程,直到所有线程的任务完成,一个“产品”的加工过程就完成了。 通过Go的channel,可以很方便的实现流水线作业。流水线作业的实现在linux系统编程中,一般来说流水线作业的线程数是固定的,我们模拟的这个场景,假设有几个固定的goroutine共同协作来完成一个字符串的处理,goro...

2018-07-11 22:01:58 991

原创 Go语言的channel和死锁

Go中channel产生的死锁阻塞(同步)channel–不带缓冲区的channel阻塞channel要点默认情况下创建的channel是阻塞和不带缓冲区的,例如:ch1 := make(chan int) // 创建一个阻塞的不带缓冲区的channel通过默认方式创建的channel有以下性质:发送操作将会阻塞,直到接收端准备好了。接收操作将会阻塞,直到发...

2018-07-10 22:41:33 1533

neo4j调优手册v1.0.pdf

neo4j性能优化

2021-08-04

泰坦里克事故乘客训练和测试数据

泰坦尼克事故的乘客信息,训练数据和测试数据

2017-07-01

avafind 破解版

avafind 可用版本。

2016-10-06

unix network programing

unix network programing steven 的经典书籍 学linux/unix网络编程必备书 网络上有chm版本的,我把它搞成了pdf版,方便大家打印

2009-03-06

write_solid_code

编写风格好的代码,本书可以 让你学到如何颈好的写出风格,和稳健的程序代码。

2008-11-06

linux编程和内核的调试技巧

调试技巧 linux下程序的调试技巧,包括内核的调试,很有用的一本书哦!

2008-10-10

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除