博客园 - 旭东的博客
uuid:24b78886-0ed1-41c2-8670-e3f31dcf42c4;id=49710
2019-08-11T06:38:25Z
旭东的博客
https://www.cnblogs.com/xudong-bupt/
feed.cnblogs.com
https://www.cnblogs.com/xudong-bupt/p/11334282.html
问题追查:QA压测工具http长连接总是被服务端close情况 - 旭东的博客
1. 背景 最近QA对线上单模块进行压测(非全链路压测),http客户端 与 thrift服务端的tcp链接总在一段时间被close。 查看服务端日志显示 i/o timeout. 最后的结果是: qps太小, 长时间不发送请求, server主动关闭socket 2. 查看thrift框架原代码
2019-08-11T06:38:00Z
2019-08-11T06:38:00Z
旭东的博客
https://www.cnblogs.com/xudong-bupt/
【摘要】1. 背景 最近QA对线上单模块进行压测(非全链路压测),http客户端 与 thrift服务端的tcp链接总在一段时间被close。 查看服务端日志显示 i/o timeout. 最后的结果是: qps太小, 长时间不发送请求, server主动关闭socket 2. 查看thrift框架原代码 <a href="https://www.cnblogs.com/xudong-bupt/p/11334282.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/xudong-bupt/p/10217664.html
Raft一致性算法 - 旭东的博客
动画网址 http://thesecretlivesofdata.com/raft/
2019-06-02T02:52:00Z
2019-06-02T02:52:00Z
旭东的博客
https://www.cnblogs.com/xudong-bupt/
【摘要】动画网址 http://thesecretlivesofdata.com/raft/ <a href="https://www.cnblogs.com/xudong-bupt/p/10217664.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/xudong-bupt/p/10959110.html
go并发编程 WaitGroup, Mutex - 旭东的博客
1.背景 记录一下,方便后续写代码直接使用。 需要注意几点: chan 默认支持多协程工作,不需要加锁。 其他变量操作需要使用锁保护(map多协程并发写会panic, 并且无法捕获)。 启动goroutine时, 通常需要传递参数。不读取局部变量。 需要使用waitgroup等待所有goroutin
2019-06-02T00:54:00Z
2019-06-02T00:54:00Z
旭东的博客
https://www.cnblogs.com/xudong-bupt/
【摘要】1.背景 记录一下,方便后续写代码直接使用。 需要注意几点: chan 默认支持多协程工作,不需要加锁。 其他变量操作需要使用锁保护(map多协程并发写会panic, 并且无法捕获)。 启动goroutine时, 通常需要传递参数。不读取局部变量。 需要使用waitgroup等待所有goroutin <a href="https://www.cnblogs.com/xudong-bupt/p/10959110.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/xudong-bupt/p/10760423.html
golang使用chan注意事项 - 旭东的博客
背景 最近老代码中遇到的一个问题,表现为: goroutine数量在高峰期上涨,上涨后平峰期将不下来。也就是goroutine泄露 使用pprof看,进程堵塞在chan chan的使用经验 在使用chan时,需要注意堵塞问题 chan做为参数传递时,每个接收方都需要注意chan可能的堵塞(否则cha
2019-04-25T00:27:00Z
2019-04-25T00:27:00Z
旭东的博客
https://www.cnblogs.com/xudong-bupt/
【摘要】背景 最近老代码中遇到的一个问题,表现为: goroutine数量在高峰期上涨,上涨后平峰期将不下来。也就是goroutine泄露 使用pprof看,进程堵塞在chan chan的使用经验 在使用chan时,需要注意堵塞问题 chan做为参数传递时,每个接收方都需要注意chan可能的堵塞(否则cha <a href="https://www.cnblogs.com/xudong-bupt/p/10760423.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/xudong-bupt/p/10657882.html
Go 语言学习笔记 - 旭东的博客
1. go没有static关键字 面向对象编程中,尽量对函数进行封装,对于没有函数变量的对象,使用static关键字尤其方便。 go中没有static关键字,必须每次new一个出来。 2. go没有while; do...while循环 go语言里面的for循环比较灵活 go func main()
2019-04-06T09:09:00Z
2019-04-06T09:09:00Z
旭东的博客
https://www.cnblogs.com/xudong-bupt/
【摘要】1. go没有static关键字 面向对象编程中,尽量对函数进行封装,对于没有函数变量的对象,使用static关键字尤其方便。 go中没有static关键字,必须每次new一个出来。 2. go没有while; do...while循环 go语言里面的for循环比较灵活 go func main() <a href="https://www.cnblogs.com/xudong-bupt/p/10657882.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/xudong-bupt/p/10199028.html
Go语言无锁队列组件的实现 (chan/interface/select) - 旭东的博客
1. 背景 go代码中要实现异步很简单,go funcName()。 但是进程需要控制协程数量在合理范围内,对应大批量任务可以使用“协程池 + 无锁队列”实现。 2. golang无锁队列实现思路 Channel是Go中的一个核心类型,你可以把它看成一个管道,通过它并发核心单元就可以发送或者接收数据
2018-12-31T03:56:00Z
2018-12-31T03:56:00Z
旭东的博客
https://www.cnblogs.com/xudong-bupt/
【摘要】1. 背景 go代码中要实现异步很简单,go funcName()。 但是进程需要控制协程数量在合理范围内,对应大批量任务可以使用“协程池 + 无锁队列”实现。 2. golang无锁队列实现思路 Channel是Go中的一个核心类型,你可以把它看成一个管道,通过它并发核心单元就可以发送或者接收数据 <a href="https://www.cnblogs.com/xudong-bupt/p/10199028.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/xudong-bupt/p/10014915.html
Go web编程实例 - 旭东的博客
1. go web编程入门 记录个web编程例子方便以后使用。 主要有: chan的使用(带缓存,不带缓存) client发起get/post请求 server解析get/post请求参数 http.HandleFunc 根据请求uri设置对应处理func 2. server.go, 参数解析返回
2018-11-25T06:24:00Z
2018-11-25T06:24:00Z
旭东的博客
https://www.cnblogs.com/xudong-bupt/
【摘要】1. go web编程入门 记录个web编程例子方便以后使用。 主要有: chan的使用(带缓存,不带缓存) client发起get/post请求 server解析get/post请求参数 http.HandleFunc 根据请求uri设置对应处理func 2. server.go, 参数解析返回 <a href="https://www.cnblogs.com/xudong-bupt/p/10014915.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/xudong-bupt/p/9496887.html
分布式环境中,模块数据交互协议分析 (百度brpc) - 旭东的博客
1. 背景 之前听到同事说,要为自己的模块考虑写个数据协议。今天有空想了一下。写出来,方便后续使用。 中可以支持多种协议,nshead、redis、mongo等20多种协议。 2. 什么是数据交互协议? 这里说的协议,不是tcp/ip这些网络协议。 在分布式环境中,我们需要将模块的数据通过网络bit
2018-08-18T05:46:00Z
2018-08-18T05:46:00Z
旭东的博客
https://www.cnblogs.com/xudong-bupt/
【摘要】1. 背景 之前听到同事说,要为自己的模块考虑写个数据协议。今天有空想了一下。写出来,方便后续使用。 中可以支持多种协议,nshead、redis、mongo等20多种协议。 2. 什么是数据交互协议? 这里说的协议,不是tcp/ip这些网络协议。 在分布式环境中,我们需要将模块的数据通过网络bit <a href="https://www.cnblogs.com/xudong-bupt/p/9496887.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/xudong-bupt/p/9485080.html
百度brpc 压测工具rpc_press解析 - 旭东的博客
1. 背景 昨天看到一段brpc中的压测代码rpc_press, 看着不错。整理一下。 发压工具的难点不是发送请求,而是要注意下面的2点: 保证能发出 ,比如上万qps ,比如控制为5qps,不可以大量发压 2. brpc 中的是关键实现 2.1 如何确保发送足够qps rpc_press 采用多线
2018-08-16T00:05:00Z
2018-08-16T00:05:00Z
旭东的博客
https://www.cnblogs.com/xudong-bupt/
【摘要】1. 背景 昨天看到一段brpc中的压测代码rpc_press, 看着不错。整理一下。 发压工具的难点不是发送请求,而是要注意下面的2点: 保证能发出 ,比如上万qps ,比如控制为5qps,不可以大量发压 2. brpc 中的是关键实现 2.1 如何确保发送足够qps rpc_press 采用多线 <a href="https://www.cnblogs.com/xudong-bupt/p/9485080.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/xudong-bupt/p/9463804.html
Reactor反应器模式 (epoll) - 旭东的博客
1. 背景 最近在看redis源码,主体流程看完了。 在网上看到了reactor模式,看了一下,其实我们经常使用这种模式。 2. 什么是reactor模式 反应器设计模式(Reactor pattern)是一种为处理并发服务请求,并将请求提交到一个或者多个服务处理程序的事件设计模式。 当客户端请求抵
2018-08-12T10:44:00Z
2018-08-12T10:44:00Z
旭东的博客
https://www.cnblogs.com/xudong-bupt/
【摘要】1. 背景 最近在看redis源码,主体流程看完了。 在网上看到了reactor模式,看了一下,其实我们经常使用这种模式。 2. 什么是reactor模式 反应器设计模式(Reactor pattern)是一种为处理并发服务请求,并将请求提交到一个或者多个服务处理程序的事件设计模式。 当客户端请求抵 <a href="https://www.cnblogs.com/xudong-bupt/p/9463804.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/xudong-bupt/p/9446736.html
C++ 中的不定参数与格式化字符串 # ## vsprintf - 旭东的博客
日志打印或者格式字符串时,可能会用到不定参数的使用,这里记录一下。 格式化字符串有很多方法: snprintf "std::stringstream" \ 的使用 \ 是一个连接符号,用于把参数连在一起 \ 是“字符串化”的意思,出现在宏定义中的 是把跟在后面的参数转换成一个字符串 并且 都只能出现
2018-08-09T00:47:00Z
2018-08-09T00:47:00Z
旭东的博客
https://www.cnblogs.com/xudong-bupt/
【摘要】日志打印或者格式字符串时,可能会用到不定参数的使用,这里记录一下。 格式化字符串有很多方法: snprintf "std::stringstream" \ 的使用 \ 是一个连接符号,用于把参数连在一起 \ 是“字符串化”的意思,出现在宏定义中的 是把跟在后面的参数转换成一个字符串 并且 都只能出现 <a href="https://www.cnblogs.com/xudong-bupt/p/9446736.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/xudong-bupt/p/9369605.html
Python多进程池 multiprocessing Pool - 旭东的博客
1. 背景 由于需要写python程序, 定时、大量发送htttp请求,并对结果进行处理。 参考其他代码有进程池,记录一下。 2. 多进程 vs 多线程 c++程序中,单个模块通常是 ,会启动几十、上百个线程,充分发挥机器性能。(目前c++11有了std::thread编程多线程很方便,可以参考我之
2018-07-29T02:16:00Z
2018-07-29T02:16:00Z
旭东的博客
https://www.cnblogs.com/xudong-bupt/
【摘要】1. 背景 由于需要写python程序, 定时、大量发送htttp请求,并对结果进行处理。 参考其他代码有进程池,记录一下。 2. 多进程 vs 多线程 c++程序中,单个模块通常是 ,会启动几十、上百个线程,充分发挥机器性能。(目前c++11有了std::thread编程多线程很方便,可以参考我之 <a href="https://www.cnblogs.com/xudong-bupt/p/9369605.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/xudong-bupt/p/9363904.html
protobuf语法指南 - 旭东的博客
遇到proto编译问问,看看proto语法,记录一下 protobuf3 语法指南 http://colobu.com/2017/03/16/Protobuf3 language guide/ https://developers.google.com/protocol buffers/docs/p
2018-07-25T00:34:00Z
2018-07-25T00:34:00Z
旭东的博客
https://www.cnblogs.com/xudong-bupt/
【摘要】遇到proto编译问问,看看proto语法,记录一下 protobuf3 语法指南 http://colobu.com/2017/03/16/Protobuf3 language guide/ https://developers.google.com/protocol buffers/docs/p <a href="https://www.cnblogs.com/xudong-bupt/p/9363904.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/xudong-bupt/p/9351293.html
linux 监控工具netdata - 旭东的博客
1. 背景 工作的关系,需要使用netdata将服务器信息实时、动态展示。 调研了netdata工具,记录一下,方便后续使用。 2. netdata介绍 2.1 netdata 能做什么? 可以参考:http://blog.ywheel.cn/post/2017/03/26/netdata/ net
2018-07-22T14:54:00Z
2018-07-22T14:54:00Z
旭东的博客
https://www.cnblogs.com/xudong-bupt/
【摘要】1. 背景 工作的关系,需要使用netdata将服务器信息实时、动态展示。 调研了netdata工具,记录一下,方便后续使用。 2. netdata介绍 2.1 netdata 能做什么? 可以参考:http://blog.ywheel.cn/post/2017/03/26/netdata/ net <a href="https://www.cnblogs.com/xudong-bupt/p/9351293.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/xudong-bupt/p/9211087.html
C++并发编程 条件变量 condition_variable,线程安全队列示例 - 旭东的博客
1. 背景 c++11中提供了对线程与条件变量的更好支持,对于写多线程程序方便了很多。 再看c++并发编程,记一下学习笔记。 2. c++11 提供的相关api 3.1 wait wait用于无条件等待,其中Predicate表示校验条件,可以避免假唤醒。 3.2 wait for wait_for
2018-06-23T15:49:00Z
2018-06-23T15:49:00Z
旭东的博客
https://www.cnblogs.com/xudong-bupt/
【摘要】1. 背景 c++11中提供了对线程与条件变量的更好支持,对于写多线程程序方便了很多。 再看c++并发编程,记一下学习笔记。 2. c++11 提供的相关api 3.1 wait wait用于无条件等待,其中Predicate表示校验条件,可以避免假唤醒。 3.2 wait for wait_for <a href="https://www.cnblogs.com/xudong-bupt/p/9211087.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/xudong-bupt/p/9194394.html
C++ 并发编程,std::unique_lock与std::lock_guard区别示例 - 旭东的博客
背景 平时看代码时,也会使用到std::lock_guard,但是std::unique_lock用的比较少。在看并发编程,这里总结一下。方便后续使用。 std::unique_lock也可以提供自动加锁、解锁功能,比std::lock_guard更加灵活。 std::lock_guard std:
2018-06-20T00:03:00Z
2018-06-20T00:03:00Z
旭东的博客
https://www.cnblogs.com/xudong-bupt/
【摘要】背景 平时看代码时,也会使用到std::lock_guard,但是std::unique_lock用的比较少。在看并发编程,这里总结一下。方便后续使用。 std::unique_lock也可以提供自动加锁、解锁功能,比std::lock_guard更加灵活。 std::lock_guard std: <a href="https://www.cnblogs.com/xudong-bupt/p/9194394.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/xudong-bupt/p/9181271.html
linux设置预留端口号,防止监听端口被占用 ip_local_reserved_ports - 旭东的博客
1. 背景 linux服务器启动时,会对指定的端口进行监听bind,如果同一个机器上这个端口已经被使用,则监听失败,程序无法启动。 linux客户端连接服务器accept时,系统会分配本地临时端口用于网络连接。 目前是”大混部”的时代,一台物理机可能会部署多个服务,如果端口号设置不好,很可能会出现端
2018-06-14T23:51:00Z
2018-06-14T23:51:00Z
旭东的博客
https://www.cnblogs.com/xudong-bupt/
【摘要】1. 背景 linux服务器启动时,会对指定的端口进行监听bind,如果同一个机器上这个端口已经被使用,则监听失败,程序无法启动。 linux客户端连接服务器accept时,系统会分配本地临时端口用于网络连接。 目前是”大混部”的时代,一台物理机可能会部署多个服务,如果端口号设置不好,很可能会出现端 <a href="https://www.cnblogs.com/xudong-bupt/p/9181271.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/xudong-bupt/p/9175963.html
goto语句引起的crosses initialization of XXX - 旭东的博客
1. 背景 goto语句虽然目前已经不提倡使用,但是用起来还是很方便,尤其是老代码中见的比较多。 在改动有goto语句的老代码时需要特别注意,是否跳过来资源的释放、有用变量的初始化等等。 很久之前写c程序时,有些提交系统要求变量必须在函数开始地方全部申明,最近遇到了"crosses initiali
2018-06-13T23:49:00Z
2018-06-13T23:49:00Z
旭东的博客
https://www.cnblogs.com/xudong-bupt/
【摘要】1. 背景 goto语句虽然目前已经不提倡使用,但是用起来还是很方便,尤其是老代码中见的比较多。 在改动有goto语句的老代码时需要特别注意,是否跳过来资源的释放、有用变量的初始化等等。 很久之前写c程序时,有些提交系统要求变量必须在函数开始地方全部申明,最近遇到了"crosses initiali <a href="https://www.cnblogs.com/xudong-bupt/p/9175963.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/xudong-bupt/p/9125816.html
C++11 多线程编程 使用lambda创建std::thread (生产/消费者模式) - 旭东的博客
要写个tcp server / client的博客,想着先写个c++11多线程程序。方便后面写博客使用。 目前c++11中写多线程已经很方便了,不用再像之前的pthread_create,c++11中已经有了std::thread库可以方便使用。 直接看代码(100个任务, 多个线程处理): 编译、
2018-06-02T09:00:00Z
2018-06-02T09:00:00Z
旭东的博客
https://www.cnblogs.com/xudong-bupt/
【摘要】要写个tcp server / client的博客,想着先写个c++11多线程程序。方便后面写博客使用。 目前c++11中写多线程已经很方便了,不用再像之前的pthread_create,c++11中已经有了std::thread库可以方便使用。 直接看代码(100个任务, 多个线程处理): 编译、 <a href="https://www.cnblogs.com/xudong-bupt/p/9125816.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/xudong-bupt/p/9091582.html
shell命令行执行python(解析json) - 旭东的博客
每个脚本都有自己的擅长。 有次实现一个work,使用了shell,php,python看着文件种类多,不方便交接,看着也比较麻烦。 减少文件种类数,也是很有必要的。 遇到的场景:shell程序需要从json中获取信息,继续处理。 文件, json.txt 可以在shell中直接调用python(注意
2018-05-26T01:24:00Z
2018-05-26T01:24:00Z
旭东的博客
https://www.cnblogs.com/xudong-bupt/
【摘要】每个脚本都有自己的擅长。 有次实现一个work,使用了shell,php,python看着文件种类多,不方便交接,看着也比较麻烦。 减少文件种类数,也是很有必要的。 遇到的场景:shell程序需要从json中获取信息,继续处理。 文件, json.txt 可以在shell中直接调用python(注意 <a href="https://www.cnblogs.com/xudong-bupt/p/9091582.html" target="_blank">阅读全文</a>