
linux
abel_qiu
在各种新奇技术的背后,是对计算机基础的理解与认知,在对计算机基础的认知背后是人的学习能力和思维能力,在思维能力背后,是我对这个世界的好奇心,在好奇心的背后是要变的更有智慧的万丈雄心。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Linux 挂在windows 目录小技巧
首先要检查在linux的目录受否存在如下的文件,如果不存在,需要安装/sbin/mount.cifs在windows 下建立共享文件夹 linux下执行以下语句sudo mount -t cifs //192.168.142.1/buffer/ ~/windows/ -o username=choulu若想要开机自动挂在则需要在/etc/fstab中添加如下语句//192.168.1原创 2016-09-27 16:22:30 · 1385 阅读 · 0 评论 -
c++原子同步
#include <sys/cdefs.h>#include #include <stdio.h>using namespace std;int main(){int v = 10;cout << __sync_fetch_and_add(&v,1) << endl;cout << v << endl;...原创 2019-05-15 11:52:20 · 366 阅读 · 0 评论 -
上线服务观察
上线一个服务需要观察的点有 1. 服务的内存使用情况是否正常 在做agent的时候,由于后期改了监控的逻辑,导致一部分内存泄漏,内存持续增长。 觉得观察的步骤是在程序上线几个周期,5分钟持续关注,如果一直上涨得思考,一天后也要一直关注5分钟,这时候如果不是很高一般问题不大,不过几天后也要看内存的增长情况,同时看看是否有错误日志。 2. 错误日志是否持续打印。 3. 查看程序原创 2017-06-05 17:00:06 · 294 阅读 · 0 评论 -
CMakeList 编写和debug release区分
cmake_minimum_required(VERSION 2.6)PROJECT(active_service)EXECUTE_PROCESS(COMMAND git log -1 --pretty=format:%h OUTPUT_VARIABLE version)add_definitions(-DACTIVE_GIT_VERSION=${version})set(CMAKE_CXX_原创 2017-04-27 16:08:48 · 7501 阅读 · 0 评论 -
signal 进程通信
先看send: 1. 定义信号量函数static void sighandler(int signo){ sigval tid; tid.sival_int = signo; cout << pid <<" " << signo << endl; sigqueue(pid, SIGWINCH, tid); // 发送给接收端信号量和原创 2017-04-26 08:40:39 · 468 阅读 · 0 评论 -
Http类
废话不多说,以后直接用这个/** cycle.cc** Created on : 2016.12.30* Author : qiulu*/#include "http_helper.h"bool HttpHelper::Init(Config *config){ m_Config = config; if (m_Config->isMember("report_u原创 2017-03-29 09:56:32 · 406 阅读 · 0 评论 -
异步化方案
最近做项目,需要调用的一些服务,但是这个服务本身和主线程没有什么关联,所以这时候我们可以将其异步化,从而提升整体的性能。 然后我是怎么做的呢? 第一步,肯定是要开启线程,初始化mutexpthread_mutex_t locker; pthread_cond_t cond;pthread_t thread;queue<AsynJob *> m_qtransfer; //队列作为缓冲区p原创 2017-03-02 15:11:17 · 467 阅读 · 0 评论 -
tcpdump
今天读了一些tcpdump的使用方式, 总结一下, 还是用最简单的例子来说吧:sudo tcpdump -i eth0 host 192.168.166.40-i 指定网卡host 表示从host出发到结束的包然后读一下结果15:50:27.113450 IP test.saurfang.jd.com.47462 > 192.168.166.40.websm: Flags [P.], seq 2原创 2017-02-22 16:38:50 · 331 阅读 · 0 评论 -
Nginx事件模块小结
这两天着重看nginx事件模块的处理,这一部分跟网络框架比较大。跟现在工作内容相关性也比较大,总结一下它在这方面的处理方式,下次写代码的时候可以用一下。得到了2点启发: 1. 防止epoll惊群,可以采用锁的方式处理,但是不能等epoll响应的事件处理完再释放锁,这样锁的占用时间会比较长,从而使得其他的进程无法epoll wait,拖慢效率。可以先把事件加入连接池,释放锁,然后再处理。 2.原创 2017-01-11 10:50:36 · 315 阅读 · 0 评论 -
agent TCP read
这两天解除了网络模型,踩了一些坑, 现在写一点惨痛教训。 TCP 才read的时候,可能有这几种情况1. 返回值>0,这种情况又分为2中情况 1.1 返回值==想要读到的size,这种情况意味着这次读工作良好, 且读到了想要的byte数,在处理的时候,不要标记该连接的状态,继续下次read 1.2 返回值 < 想要读到的size,原创 2016-12-05 14:19:12 · 508 阅读 · 0 评论 -
Nginx 内存池管理
Nginx内存池的设计十分巧妙, 可以研究一下, 以后再写代码的时候可以用上。其具体分配的每个内存块的结构如下图。那么怎么构造出这样的结构呢? 看下下面的数据结构再说。它有两个最为重要的数据结构,如下: 其中ngx_pool_s即所谓的内存池, 他数据的具体细节可以参考注释:typedef struct { u_char *last;//表示当前可以写的位置,当原创 2016-10-13 10:34:32 · 371 阅读 · 0 评论 -
对顺序锁的思考
今天读到顺序锁的概念,似乎对之前被问到的锁优化问题,有了一些新的理解,说不定可以用这个来解决。先定义一下顺序锁的数据结构吧.typedef struct { spinlock_t lock; // 用来锁住写,临界区只有一个写 int seq; //版本号控制,后续详解}seq_lock_t;说要顺序锁,可以分为读写两方。那么先来看写的一方是怎么做的?//锁操作如下void pt...原创 2019-05-16 13:49:47 · 191 阅读 · 1 评论