青山相待

            白云相爱

            梦不到紫罗袍共黄金带

            一茅斋

            野花开

            管甚谁家兴废谁成败

            陋巷单瓢亦乐哉

            贫,气不改!

            达,志不改!

随笔分类 -  LINUX多线程

摘要:BIO即background I/O service,后台I/O服务,是redis的aof持久化后台服务。 redis把阻塞的同步I/O操作交给后台I/O服务来完成:close和fsync。 close加入BIO的原因 1.如果fd是特定文件描述符的最后一份拷贝,那么文件描述符相关的资源会被释放。 阅读全文
posted @ 2016-07-12 10:19 Leo.Z 阅读(1882) 评论(0) 推荐(0)
摘要:网络编程不只是编写网络、主机、进程都正常时能良好工作的进程,更重要的是客户主机崩溃、客户进程崩溃网络异常时怎么处理。 accept被信号中断 accept以及套接字上的I/O可能被信号打断,并返回EINTR作为结果,必须处理该返回值并且适当时候再次调用。 for(;;) { if(connfd = 阅读全文
posted @ 2016-07-08 16:26 Leo.Z 阅读(1158) 评论(0) 推荐(0)
摘要:基础要素 任务/数据划分 多个控制流并行,划分带来的负载均衡和通信开销也对程序的性能有决定性的作用 并发访问控制 多个控制流需要访问不同或者相同的资源,如何协调这些资源变得非常重要 并行化和面向对象 并行需要去除数据和控制的依赖关系,而面向对象把大问题解决成小问题,然后通过对象之间的通信来解决小问题 阅读全文
posted @ 2016-07-07 15:00 Leo.Z 阅读(327) 评论(0) 推荐(0)
摘要:引言 C10K problem提到一种zero-copy的技术,可以提高网络的吞吐量,分布式消息队列kafka中在消费者消费消息的时候根据offset进行zero-copy。linux下的zero-copy通过sendfile API实现。 什么是zero-copy zero-copy在概念上是值操 阅读全文
posted @ 2016-07-03 00:33 Leo.Z 阅读(262) 评论(0) 推荐(0)
摘要:什么是C10K问题 I/O策略 软件架构 1.单线程解决多重I/O调用 不要使用阻塞/同步的调用,如果非要这么做,那就采用多进程或者多线程来并发处理。 使用非阻塞的调用和就绪通知策略,当下一个I/O可用时通知调用者。适用于套接字I/O,而不是磁盘I/O. 使用异步的调用和通知策略,当下一个I/O可用 阅读全文
posted @ 2016-07-03 00:06 Leo.Z 阅读(286) 评论(0) 推荐(0)
摘要:reactor介绍 reactor的工作模式就像它的名字一样,是一种反射模式,当事件发生时,根据发生的事件调用注册的处理器。 Reactor的优点和应用 Reactor最常用于非阻塞的socket 传统的设计是一种同步的停等协议,读写操作执行后要等待当前fd的下一次可读/写事件,这期间什么都不能干, 阅读全文
posted @ 2016-07-03 00:05 Leo.Z 阅读(1972) 评论(0) 推荐(0)
摘要:libev是一个开源库,实现了一个reactor模式事件驱动任务调度库。代码非常精简,包含所有实现的.c文件只有不到5000行。 支持的事件类型: ev_io ev_timer ev_periodic ev_signal ev_child ev_stat ev_idle ev_prepare and 阅读全文
posted @ 2016-07-03 00:04 Leo.Z 阅读(466) 评论(0) 推荐(0)
摘要:线程安全一般的,高并发使用不同的对象是安全的,在高并发中使用单一的对象是不安全的,io_service类型提供了单对象高并发的强安全保证。线程池多线程可能调用io_service::run()来建立一个可以调用完成句柄的线程池,也可以使用io_service::post()把计算任务交给线程池处理。 阅读全文
posted @ 2016-03-12 21:21 Leo.Z 阅读(1158) 评论(0) 推荐(1)
摘要:多线程及多进程编程同步时可能出现的问题,如果一个值被P1读取两次,两次的值相同,据此判断该值没有被修改过,但该值可能在两次读取之间被P2修改为另外一个value,并在P1再次读取之前修改回了原值。P1被愚弄,认为该值一直没有改变过。 下面的事件序列会导致ABA问题 1.线程P1访问共享内存的valu 阅读全文
posted @ 2016-03-09 22:35 Leo.Z 阅读(420) 评论(0) 推荐(1)
摘要:pstack竟然是一个shell脚本,核心是调用gdb的thread apply all bt查看进程的所有线程的堆栈,之后用sed正则展示线程堆栈信息。/proc/pid/exe是一个指向可执行文件的软连接。#!/bin/shif test $# -ne 1; then echo "Usage:... 阅读全文
posted @ 2015-01-07 11:34 Leo.Z 阅读(798) 评论(0) 推荐(1)
摘要:新学了一个技巧:自动锁,类似于ace的自动锁,进入作用域声明一个用mutex初始化的自动锁对象,对象声明成功则表示获取锁资源成功,程序继续运行,否则持续等待;在离开作用域时自动释放锁。classAutoLock{public: AutoLock(pthread_mutex_t*pMutex):m... 阅读全文
posted @ 2014-12-08 16:16 Leo.Z 阅读(325) 评论(0) 推荐(0)