Go语言中文网 为您找到相关结果 129

golang test测试使用

1.创建测试文件夹mysql,文件夹下的go文件的package必须与文件夹名一致(不然会识别不到) 2.创建需要测试的文件mysql.go(使用github.com/go-sql-driver/mysql包) package mysql import ( "database/sql" _ "github.com/go-sql-driver/mysql" ) func findByPk(pk int) int { var num int = 0 db, err := sql.Open("mysql", "root:@tcp(127.0.0.1:3306)/plugin_master?charset=utf8") if err != nil { panic(err.Error()) } def...阅读全文

博文 2015-03-06 03:00:16 benlightning

golang sync WaitGroup

刚才看golang的sync的包,看见一个很有用的功能。就是WaitGroup。 先说说WaitGroup的用途:它能够一直等到所有的goroutine执行完成,并且阻塞主线程的执行,直到所有的goroutine执行完成。 WaitGroup总共有三个方法:Add(delta int),Done(),Wait()。简单的说一下这三个方法的作用。 Add:添加或者减少等待goroutine的数量 Done:相当于Add(-1) Wait:执行阻塞,直到所有的WaitGroup数量变成0 例子: package main import ( "fmt" "sync" "time" ) func main() { var wg sync.WaitGroup for i := 0; i < 5; i ...阅读全文

博文 2014-10-04 19:26:12 u011511092

go语言的chan

chan是一个FIFO队列,chan分成两种类型同步和异步同步的chan完成发送者和接受者之间手递手传递元素的过程,必须要求对方的存在才能完成一次发送或接受异步的chan发送和接受都是基于chan的缓存,但当缓存队列填满后,发送者就会进入发送队列, 当缓存队列为空时,接受者就会接入等待队列。 chan的数据结构: struct Hchan { uintgo qcount; // total data in the q uintgo dataqsiz; // size of the circular q uint16 elemsize; uint16 pad; // ensures proper alignment of the buffer that follows Hchan in mem...阅读全文

博文 2015-05-18 03:00:01 richmonkey

golang中os/signal包的使用

os/signal包实现对信号的处理 golang中对信号的处理主要使用os/signal包中的两个方法:一个是notify方法用来监听收到的信号;一个是 stop方法用来取消监听。 func Notify(c chan<- os.Signal, sig ...os.Signal) func Notify(c chan<- os.Signal, sig ...os.Signal)第一个参数表示接收信号的channel, 第二个及后面的参数表示设置要监听的信号,如果不设置表示监听所有的信号。 func main() { c := make(chan os.Signal, 0) signal.Notify(c) // Block until a signal is received. s := ...阅读全文

博文 2015-06-17 20:03:59 chenbaoke

分布式事务一致性方案

http://www.infoq.com/cn/articles/solution-of-distributed-system-transaction-consistency 在OLTP系统领域,我们在很多业务场景下都会面临事务一致性方面的需求,例如最经典的Bob给Smith转账的案例。传统的企业开发,系统往往是以单体应用形式存在的,也没有横跨多个数据库。我们通常只需借助开发平台中特有数据访问技术和框架(例如Spring、JDBC、ADO.NET),结合关系型数据库自带的事务管理机制来实现事务性的需求。关系型数据库通常具有ACID特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。而大型互联网平台往往是由一系列分...阅读全文

博文 2017-03-09 05:02:33 jey恒

ECUG Con 邀您共议服务端开发最深度实践

![](http://ww4.sinaimg.cn/mw1024/7bb2bde1gw1f061fokhgpj20o00dd40x.jpg ) ECUG 全称为 Effective Cloud User Group (实效云计算用户组),由七牛云 CEO 许式伟于 2007 年发起,集结了一批具有高端视角并仍醉心于技术本身的同仁,共同关注云计算前沿技术的最新成果和分布式开发、运维的最佳实践。在过去的八年中, ECUG 社区每年都会组织一场全国性的 ECUG Con 大会,期间众多技术大神纷纷参与,他们或许在大众技术会议已经鲜少露面,但会在 ECUG Con 畅谈心得,共同奉献一场半公开的高规格技术分享盛会。 ECUG Con 发展历程 ![](http://cdn.huo...阅读全文

ECUG Con 邀您共议服务端开发最深度实践

ECUG 全称为 Effective Cloud User Group (实效云计算用户组),由七牛云 CEO 许式伟于 2007 年发起,集结了一批具有高端视角并仍醉心于技术本身的同仁,共同关注云计算前沿技术的最新成果和分布式开发、运维的最佳实践。在过去的八年中, ECUG 社区每年都会组织一场全国性的 ECUG Con 大会,期间众多技术大神纷纷参与,他们或许在大众技术会议已经鲜少露面,但会在 ECUG Con 畅谈心得,共同奉献一场半公开的高规格技术分享盛会。 ECUG Con 发展历程 ECUG Con 2015 将于 2016 年 1 月 22 ~ 23 日在新疆大厦举行,作为具有重要意义的第十期聚会,我们落地北京,同时首次面向所有技术人群公开报名。本届大会仍然以交流云计算产业的最...阅读全文

博文 2017-02-09 08:10:45 七牛云

golang注意Channel的阻塞特性

本博客已迁移至 www.0x520.com 之前用channel练习的时候遇到一个问题,看似好像代码合理,而且编译也不会有问题,但忘记了一个重要的channel特性。 正确的代码: package main import "fmt" func foo(){ defer fmt.Println("World") fmt.Println("Hello") } func sum(x,y int,c chan int){ c <- x + y } func main(){ foo() c := make (chan int); go sum(24,18,c) fmt.Println(<-c); } 如果我把代码改成: package main import "fmt" func foo(){ def...阅读全文

博文 2014-10-04 19:27:33 小小霸王枪

golang 里goroutine产生的线程数量

import "os" func main() { for i:=0; i<20; i++ { go func() { for { b:=make([]byte, 10) os.Stdin.Read(b) // will block } }() } select{} } 会产生21个线程: runtime scheduler(src/pkg/runtime/proc.c)会维护一个线程池,当某个goroutine被block后,scheduler会创建一个新线程给其他ready的goroutine GOMAXPROCS控制的是未被阻塞的所有goroutine被multiplex到多少个线程上运...阅读全文

博文 2015-06-17 20:22:53 kjfcpua

go-lexer-词法分析

词法分析一般是编译器的第一部分,而且词法分析很简单,就是一个有限状态机.开始词法分析的过程就是把源文件转换成一组预先定义好的token的过程.这一组被统一表现的token之后会被送入语法分析器进行语法解析,这里我们主要关注如何进行词法分析. 做词法分析就几种方法: 直接使用工具比如lex. 使用更低一层的正则表达式. 使用状态动作,构造一个状态机. 而真正实现一个语言的话,使用工具没有什么错,但是问题是,很难获得正确的错误提示.工具生成的错误处理很弱.而且需要学习另一门规则或特定的语法.生成的代码可能性能不好,难以优化,但是用工具可以非常简单实现词法分析.早期编译器的设计阶段都会使用lex来做词法分析器,比如gcc和Go都是这么做的,但是到了后期一个真正生产化的语言可能不能依赖生成的代码,而...阅读全文

博文 2016-04-12 10:32:31 yueyue.gao

golang 中的 time 包的 Ticker

真实的应用场景是:在测试收包的顺序的时候,加了个 tick 就发现丢包了 那么来看一个应用例子: package main import ( "fmt" "runtime" "time" ) func init() { runtime.GOMAXPROCS(runtime.NumCPU()) } func main() { ch := make(chan int, 1024) go func(ch chan int) { for { val := <-ch fmt.Printf("val:%d\n", val) } }(ch) tick := time.NewTicker(1 * time.Second) for i := 0; i < 20; i++ { select { case ch ...阅读全文

博文 2017-10-06 10:30:01 liang1101

[翻译] Go(#golang) 实现的状态机

春节前,粗略研究了一下微信的公共帐号。用 Golang 实现了一个简单的 package wechat,用于接入微信公共帐号。当时就在思考,微信的文字交互过程如果要实现有一定逻辑的复杂过程,可能需要使用到状态机。然后,就看到了这篇文章:《State machines in Go (#golang)》。非常合时宜啊!翻译于此,以飨读者! ——–翻译分隔线——– Go(#golang) 实现的状态机 我已经用 Go 代替 Python 重写了一个关键的服务组件。由于 Python 的解释器不是线程安全的,所以在解析的时候使用了全局锁。Go 与 Python 不同,它内建了并发支持,并且是静态编译的。 首先要实现一个状态机。Python 的版本是基于 David Mertz 的这篇文章。 Mert...阅读全文

博文 2014-10-09 16:18:31 mikespook

Golang: 有限状态自动机

有限状态机 又简称FSM(Finite-State Machine的首字母缩写)。这个在离散数学里学过了,它是计算机领域中被广泛使用的数学概念。是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。编译原理学得好的童鞋应该对FSM不陌生,因为编译器就用了FMS来做词法扫描时的状态转移。 FSM的概念在网上一搜可以搜一大堆出来,但估计您也看不大明白。本文将以不一样的方式来讲述FSM的概念以及实现。 现实生活中,状态是随处可见的,并且通过不同的状态来做不同的事。比如冷了加衣服;饿了吃饭;困了睡觉等。这里的冷了、饿了、困了是三种不同的状态,并且根据这三个状态的转变驱动了不同行为的产生(加衣服、吃饭和睡觉)。 FSM是什么 所谓有限状态机,就是由有限个状态组成的机器。再看上面举到的例子:人...阅读全文

golang 阻塞的坑

1、写go程序的时候一定要牢记主线程不能阻塞,一旦阻塞就崩溃,就怕那种某种情况下偶尔会出现几下阻塞的,一定要杜绝。2、select case的执行顺序是乱的,不确定的3、写入管道的时候,一定要保证管道没有被阻塞写否则会崩溃,读取阻塞管道的时候关闭管道会读取到一个0值和一个false ok...阅读全文

博文 2016-02-18 03:00:00 anjianliang

Mirai源码解析

Mirai概述 mirai,2016年一个备受关注的DDoS攻击程序,与传统的僵尸网络不同的是,mirai的控制的僵尸主要是摄像头等嵌入式设备,mirai的出现将一大波安全研究者引入了IoT安全领域。 mirai的事迹主要有: 2016.9.20 ,攻击Brian Krebs个人网站,攻击流量达到665Gbps,据称有150万僵尸发起攻击。 2016.9.21, 攻击法国网络服务商OVH,攻击流量达到1Tbps 2016.9.30,mirai开源 2016.10.21, 攻击Dyn DNS,导致Github、Twitter等美国大半个互联网下线 2016.11.28, 攻击德国电信,mirai出现新变种 mirai已经成为IoT DDOS攻击的母体。 mirai能够控制如此大规模的僵尸网络,...阅读全文

博文 2017-07-12 09:07:07 zengfan

golang信号signal的处理

在实际项目中我们修改了配置文件后,希望在不重启进程的情况下重新加载配置文件,这时候就需要通过信号传递来进行处理了。golang中对信号的处理主要使用os/signal包中的两个方法:一个是notify方法用来监听收到的信号;一个是 stop方法用来取消监听。下面给一个些示例。 监听信号 notify方法原型 func Notify(c chan<- os.Signal, sig ...os.Signal) 第一个参数表示接收信号的管道 第二个及后面的参数表示设置要监听的信号,如果不设置表示监听所有的信号。 package main import ( "fmt" "os" "os/signal" //"syscall" ) func main() { c := make(chan os.Sig...阅读全文

博文 2015-10-14 14:27:22 陈杰斌

Go 语言的 CMS 工具库 Qor

Qor 是基于 Golang 开发的的CMS 一系列工具库,基于 Qor可以快速搭建网站的后台管理系统。 Qor 的工作库包含: 1,后台管理:可以对数据库进去 CURD 管理,支持一对一,一对多,多对多关联关系维护等等 2,支持上传图片到云以及 filesystem,resize、crop 图片等等 3,Publish 发布系统,可以修改数据,并且经过检查后,再发布到正式环境中 4,状态机,可以用于开发工作流的系统 5,I18n,翻译,可以通过在 WEB 界面翻译,并将翻译保存到数据库中 6,L10n,本地化,不同于翻译,他可以针对某个地区来对内容,或者数据结构进行本地化。 7,Roles,权限管理 8,Exchange,通过 Excel,CSV 导入导出数据 9,Wo...阅读全文

channel数据结构

channel是go语言的一大特色,使用原子函数还是使用互斥锁都不如使用channel来的简单,go语言中的channel可以作为函数参数传递和返回值返回,通过发送和接受数据在goroutine之间同步(在学习和使用go语言的时候,我们应该牢记,go语言中所有的结构都是值拷贝的) 本文不对channel使用作讲解,直接上 *酸(dai)菜(ma)* : type hchan struct { qcount uint //队列数据总的数据数量 dataqsiz uint //环形队列的数据大小 buf unsafe.Pointer //指向dataqsiz元素类型大小的数组 elemsize uint16 closed uint32 elemtype *_type // 元素类型 sendx ...阅读全文

Go 1.6将进一步改进垃圾收集器

尽管Go 1.5刚刚发布,仍然相对较新,但是Go团队已经在致力于改进其新的低延迟并发垃圾收集器,希望Go更适合新的应用领域。Google工程师Austin Clements和Rick Hudson如是说。 Go 1.5用新的垃圾收集器代替了原来的STW(stop-the-world) GC,解决了延迟问题。当负载较重时,每50ms,新的GC的活动时间可以控制在10ms以下,从而使Go程序在一般情况下能运行得更快些。在更极端的情况下,停顿可以从300ms降到4ms。 Go 1.6的目标是进一步稳定GC,并在以下几个方面做出改进: 状态协调(State coordination):Go 1.5 GC有个主要瓶颈是从Go 1.4继承来的,源自其集中式的GC协调器(coordinator),这是一个...阅读全文

博文 2015-09-13 14:40:00 臧秀涛

Nsq从入门到实践

当nsq跑起来之后, 我们可能会遇到以下问题 分布式部署 处理错误(何时requeue) 如何使用golang lib 抱着不应该只停留在入门的态度, 笔者粗浅的研究了一下这几个问题, 希望也对有同样疑问的人有帮助. 部署 由于NSQ的分布式网络结构, NSQD必须广播(到lookup)自己的地址并让消费者连接, 那么多个NSQD无法做透明负载均衡. 就必须为每一个NSQD分配单独的IP(或host)以保证消费者(在lookup找到NSQ节点)能够正确的连接. 这样部署起来可能会麻烦一些 但问题不大, 注意一下就好. ps: 如果有更好的方法请告诉我, 小弟感激不尽. NSQ Requeue And Backoff 建议结合官方文档来看 requeue(重试) 用于当错误发生, 需要重试时....阅读全文

急招武汉GO语言开发工程师15-25K

急聘武汉地区golang服务器开发工程师15-25K 职位描述: 1、负责后端GO语言TCP协议开发工作 2、与基础架构工程师、运维工程师一起实现稳定、可扩展的后台服务 3、数据驱动,不断通过产品和技术数据进行改进,并完成快速迭代 任职资格: 1、熟悉GO语言,熟悉C++更好 2、熟悉TCP/UDP协议,IM单聊群聊架构,游戏状态机、定时器等 3、熟悉常见的游戏开发算法,网络同步策略等 有意者加QQ:1948977976详聊或直接发简历到1948977976@qq.co...阅读全文

sync.Once的实现分析

sync.once可以控制函数只能被调用一次,不能多次重复调用。 我们可以用下面的代码实现一个线程安全的单例模式 ``` package singleton import ( "fmt" "sync" ) type object struct { name string } var once sync.Once var obj *object //单例指针 //公开方法 外包调用 func Instance() *object { once.Do(getObj) return obj } func getObj() { if obj == nil { obj = new(object) //可以做其他初始化事件 } } //单例测试 func (obj *object) Test() { f...阅读全文

博文 2016-06-11 20:17:31 shanks

Golang单例模式

单例模式,是一种常用的软件设计模式,在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。 1. 懒汉模式(Lazy Loading) 懒汉模式是开源项目中使用最多的一种,最大的缺点是非线程安全的 type singleton struct { } // private var instance *singleton // public func GetInstance() *singleton { if instance == nil { instance = &singleton{} // not thread safe } return instance } 2. 带锁的单例模式 type...阅读全文

博文 2017-10-13 10:04:48 iCaptain

URL处理

我对大量的URL作请求并且处理。 首先我只有一个进程开一个循环,每次处理一个URL,有些URL始终不响应, http.Get之后就阻塞了?我要怎样跳掉这个URL? 然后我对于每个URL都开一个进程,我的电脑瞬间就死机了。 而且还会出现runtime panic. 这个应该怎么解决? ...阅读全文

老司机带你用 Go 语言实现 Raft 分布式一致性协议

老司机带你用 Go 语言实现 Raft 分布式一致性协议   随着大型网站的各种高并发访问、海量数据处理等场景越来越多,如何实现网站的高可用、易伸缩、可扩展、安全等目标就显得越来越重要。   为了解决这样一系列问题,大型网站的架构也在不断发展。提高大型网站的高可用架构,不得不提的就是分布式。任何一个分布式系统都无法同时满足 Consistency(一致性),Availability(可用性),Partition tolerance(分区容错性)这三个基本需求,最多只能满足其中两项。 但是,一个分布式系统无论在 CAP 三者之间如何权衡,都无法彻底放弃一致性(Consistency),如果真的放弃一致性,那么就说明这个系统中的数据根本不可信,数据也就没有意义,那么这个系统也就没有任何价值可言。...阅读全文

博文 2017-02-09 06:00:24 chauncy

行为树 behavior3go

参考 游戏AI - 行为树Part1:简介 游戏AI - 行为树Part2:框架 https://github.com/f15gdsy/BT-Framework http://www.u77.com/game/3067 一、有限状态机 游戏中的AI,大多数都是按照规则设定好的,没有太多花哨的技术。原因有几个: 一是出于风险成本的考虑,用一个新技术,需要程序员开发相应的算法和框架,游戏设计师重新上手设计方法和摸索算法的适用范围,小团队承受不起这样的开销,大团队又怕做坏名声; 二是“高级”的AI算法并不直观,难以设计。举一个例子,怎么利用神经网络来训练一个士兵AI?我见过的一个例子是设计师用几个按键来操作士兵移动攻击,然后程序自动记录敌我双方的数据和设计师的操作,最后利用这些信息作为input构...阅读全文

博文 2019-07-02 18:32:41 合肥懒皮

用GO实现的erlang的genfsm.

关于erlang的有限状态机,参考erlang四大behaviour之二-gen_fsm这篇文章。 有限状态机可以用下面这个公式来表达 State(S) x Event(E) -> Actions(A), State(S') 这两天正好空闲,就用golang实现了一下,话不多说,直接上代码 package util import ( "errors" "reflect" "sync" "time" "unicode" "unicode/utf8" "util/log" ) var typeOfError = reflect.TypeOf((*error)(nil)).Elem() type FSM struct { sync.Mutex StopReason string rcvr refl...阅读全文

博文 2015-01-13 12:09:56 sll1983

一个有特色的有限状态机

gofsm是一个简单、小巧而又特色的有限状态机(FSM)。 github已经有了很几个状态机的实现,比如下面的几个,还为什么要再发明轮子呢? 原因在于这些状态机有一个特点,就是一个状态机维护一个对象的状态,这样一个状态机就和一个具体的图像实例关联在一起,在有些情况下,这没有什么问题,而且是很好的设计,而且比较符合状态机的定义。但是在有些情况下,当我们需要维护成千上百个对象的时候,需要创建成千上百个状态机对象,这其实是很大的浪费,因为在大部分情况下,对象本身自己会维护/保持自己当前的状态,我们只需把对象当前的状态传递给一个共用的状态机就可以了,也就是gofsm本身是“stateless”,本身它包维护一个或者多个对象的状态,所有需要的输入由调用者输入,它只负责状态的转换的逻辑,所以它的实现非常...阅读全文

博文 2017-02-08 12:53:45 smallnest

TCP self-connection

Go 语言的 net 库里有下面这样的一段代码,这段代码是用来发起一个 tcp 连接的,仔细阅读这段代码可以发现代码里处理了一种很不常见的特殊情形,也就是 tcp self-connection。代码中的注释解释得很详细了。 func dialTCP(net string, laddr, raddr *TCPAddr, deadline time.Time) (*TCPConn, error) { fd, err := internetSocket(net, laddr, raddr, deadline, syscall.SOCK_STREAM, 0, "dial", sockaddrToTCP) // TCP has a rarely used mechanism called a 'si...阅读全文

博文 2014-12-21 14:54:33 skoo

深入浅出 Raft - 基本概念

引子 因为一直在跟 Raft 打交道,虽然对 Raft 很熟悉了,但如果你要我去给一个完全不知道什么是 Raft 的人讲 Raft,我觉得难度还是非常大的。所以我决定使用我一贯罗里吧嗦,用比喻和讲故事的方式,来尝试说说 Raft。 如果你跟你孩子一起看过小猪佩奇,你大概就能知道我为啥用了这么怪的取名。如果没看过的,强烈推荐你去看看,这真的是一部很不错的儿童动画。 日志和状态机 兔小姐准备在泥坑小镇成立一家银行(就叫泥坑银行吧)。对于银行储蓄系统的设计,兔小姐找来了猪爸爸。 兔小姐:『猪爸爸,我们要保证,无论怎样用户的金钱不能有错误。假如客户存了 100 块钱,那么他的账户就会多出来 100 块钱,不会是 101,也不会是 99。』 猪爸爸:『好的,兔小姐,我觉得我们可以这样。如果一个客户来存...阅读全文

博文 2017-10-16 02:43:35 siddontang

golang 中 channel 的非阻塞访问方法

在golang中,基本的channel读写操作都是阻塞的,如果你想要非阻塞的,可以使用如下示例: 即只要在select中加入default,阻塞立即变成非阻塞: package main import "fmt" func main() { messages := make(chan string) signals := make(chan bool) select { case msg := <-messages: fmt.Println("received message", msg) default: fmt.Println("no message received") } msg := "hi" select { case messages <- msg: fmt.Println("...阅读全文

博文 2018-10-24 15:34:49 乐剑天

使用nsq的时候,handler阻塞导致整个阻塞

使用nsq的时候遇到这样一个问题: AddConcurrentHandlers(handler, 8)的时候,已经有多个协程处理收到的消息。然而,当其中一个handle发生阻塞时,会导致整个Consumer阻塞,runtime.GOMAXPROCS(runtime.NumCPU()) 代码调用了。下面的代码也看不出问题,请教一下为什么会发生阻塞? ``` // AddConcurrentHandlers sets the Handler for messages received by this Consumer. It // takes a second argument which indicates the number of goroutines to spawn fo...阅读全文

go 有限状态机

用Go语言写了一个有限状态机,放在github上,有兴趣的同学可以看看:https://github.com/sharplog/hackberry $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('

    ').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.a...阅读全文

博文 2016-01-31 10:00:02 logsharp

老司机带你用 Go 语言实现 Paxos 算法

老司机带你用 Go 语言实现 Paxos 算法  在理论计算机科学中,CAP定理(CAP theorem),又被称作布鲁尔定理(Brewer’s theorem),它指出对于一个分布式计算系统来说,不可能同时满足以下三点: 一致性(Consistence),等同于所有节点访问同一份最新的数据副本; 可用性(Availability),每次请求都能获取到非错的响应——但是不保证获取的数据为最新数据; 分区容错性(Network partitioning),以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在 C 和 A 之间做出选择。 上车  今天说说一致性,分布式系统中的节点通信存在两种模型:共享内存(Shared mem...阅读全文

博文 2017-03-23 08:36:43 chauncy

golang channel buffer

package main import ( "fmt" "time" ) func main() { // Case-1: no buffer //chanMessage := make(chan string) // Case-2: with buffer ... the output changes chanMessage := make(chan string, 2) count := 4 go func() { for i := 1; i <= count; i++ { fmt.Println("send message") // send to chanMessage chanMessage <- fmt.Sprintf("message %d", i) } }() // Paus...阅读全文

博文 2015-10-17 03:00:00 bnbqian

golang test测试实例

本文的目的是对mymysql进行单元测试和性能测试 准备工作: 1 go get github.com/ziutek/mymysql/thrsafe 2 在mysql建表和初始化数据(db是test) 1 2 3 4 5 6 7 8 9 10 11 12 drop table if exists admin; CREATE TABLE `admin` ( `adminid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `username` varchar(20) NOT NULL DEFAULT '' COMMENT '后台用户名', `password` char(32) NOT NULL DEFAULT '' COMMENT '密码,md5存', ...阅读全文

博文 2015-06-17 20:17:43 kjfcpua

分布式事务管理器dtm

DTM是首款golang的开源分布式事务管理器,优雅的解决了幂等、空补偿、悬挂等分布式事务难题。提供了简单易用、高性能、易水平扩展的分布式事务解决方案。 受邀参加中国数据库大会分享[多语言环境下分布式事务实践](http://dtcc.it168.com/yicheng.html#b9) ## 亮点 * 极易接入 - 支持HTTP,提供非常简单的接口,极大降低上手分布式事务的难度,新手也能快速接入 * 使用简单 - 开发者不再担心悬挂、空补偿、幂等各类问题,框架层代为处理 * 跨语言 - 可适合多语言栈的公司使用。方便go、python、php、nodejs、ruby各类语言使用。 * 易部署、易扩展 - 仅依赖mysql,部署简单,易集群化,...阅读全文

【go共识算法】-PBFT

实用拜占庭容错系统介绍 由来 原始的拜占庭容错系统由于需要展示理论上的可行性而缺乏实用性。另外,算法的复杂度也是随节点的增加而呈指数级增加。实用拜占庭容错系统(Practical Byzantine Fault Tolerance, PBFT)降低了拜占庭协议的运行复杂度,从指数级别降低到多项式级别,使拜占庭协议在分布式系统中应用成为可能。 什么是实用拜占庭容错系统 实用拜占庭容错系统是一类“状态机”拜占庭系统(这里的状态机可以理解为“系统状态”,以区块链记账为例,系统每新增一个区块,账本就更新到一个新的状态。前面讲过,拜占庭容错系统是一个强一致性协议,每次记账后系统都会达成新的状态。),要求系统所有节点共同维护一个状态,所有节点采取的行动一致。 实用拜占庭容错系统需要运行三类基本协议: 一...阅读全文

博文 2018-10-10 17:34:44 jincheng828

异相双生 —对“天才病”的亲历感受(一)

双相情感障碍,这是我今天夏天才从医生那里听到的名词。 在这段时间里,我从网上查阅了不少资料。双相情感障碍,又名躁郁症,biapolar disorder ,情绪在高峰和低谷这两极之间像钟摆一样摇摆,波动不定,同抑郁一样,是一种心境/情感障碍…… 好了,其他医学部分的内容请自行 Google,作为双相 II 型患者的我对于双相的看法、感受: 首先,我们要明确双相分为 I 型和 II 型。如果我们简单以“激越”、“平静”、“抑郁”的概念曲线来形容人的情绪变化。那么 I 型比较典型的(但不是绝对)就可以表示为:“平静”-“激越”-“平静”,II 型比较典型(但也不是绝对)就是“平静”-“抑郁”-“平静”。更简洁地说就是, I 型更偏“激越”,II 型更偏抑郁。我自己就是 II 型。 至于这种疾病的...阅读全文

博文 2019-10-17 16:33:03 aside section ._1OhGeD