自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 资源 (1)
  • 收藏
  • 关注

转载 posix thread

描述了一个比较特殊的难题:如果线程正在等待某个特定条件发生,它应该如何处理这种情况?它可以重复对互斥对象锁定和解锁,每次都会检查共享数据结构,以查找某个值。但这是在浪费时间和资源,而且这种繁忙查询的效率非常低。解决这个问题的最佳方法是使用 pthread_cond_wait() 调用来等待特殊条件发生。了解 pthread_cond_wait() 的作用非常重要 -- 它是 POSIX 线程信

2014-06-28 17:05:48 476

转载 linux-多线程--面试题

刚无意中看到MoreWindows博主秒杀多线程面试题(http://blog.csdn.net/column/details/killthreadseries.html),第一篇就有他收集的面试题。那我就用来检验一下自己学的怎么样吧。    前面的选择题那些跳过,直接看最后的编程题。第三题(某培训机构的练习题):子线程循环 10 次,接着主线程循环 100 次,接着又

2014-06-28 11:50:59 559

转载 linux-多线程

一、什么是线程?      线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。二、什么时候使用多线程?     当多个任务可以并行执行时,可以为每个任务启动一个线程。三、线程的

2014-06-28 11:48:52 416

转载 linux 系统调用

2.1进程控制:fork创建一个新进程clone按指定条件创建子进程execve运行可执行文件exit中止进程_exit立即中止当前进程getdtablesize进程所能打开的最大文件数getpgid获取指定进程组标识号setpgid设置指定进程组标志号g

2014-06-26 18:25:00 434

转载 socketpair

先说说我的理解:socketpair创建了一对无名的套接字描述符(只能在AF_UNIX域中使用),描述符存储于一个二元数组,eg. s[2] .这对套接字可以进行双工通信,每一个描述符既可以读也可以写。这个在同一个进程中也可以进行通信,向s[0]中写入,就可以从s[1]中读取(只能从s[1]中读取),也可以在s[1]中写入,然后从s[0]中读取;但是,若没有在0端写入,而从1端读取,则1端的读取操

2014-06-26 18:15:10 416

转载 红黑树与小根堆性能对比

因为nginx与libevent采用了不同的数据结构来维护超时事件,其中nginx采用了红黑树,libevent采用的是小根堆,所以一直比较好奇,这两种数据结构谁在这种应用场景下更合适(当做优先权队列来用)好吧,好奇那就试一下就好了。。。小根堆就用前面的那篇文章中自己实现的那个代码,代码比较挫,也没有做什么优化,红黑树通过继承java的TreeMap来实现。。。测试案例:向两种结构

2014-06-26 17:37:27 1847

转载 小根堆

首先什么是小根堆:(1)它是一颗完全二叉树(2)任意一个节点均小于或等于其左右子节点的关键码(大根堆相反就是了)因此可以得知,当前树形结构的根节点就是当前整个树形结构最小的节点。。。至于说这种堆结构有什么作用:(1)以前本科的时候上数据结构课的时候就有讲过堆排序,好像还不错,O(nlogn)的复杂度(2)可以用来构造优先权队列。。。。(3)在libevent库中

2014-06-26 17:32:28 3880

转载 深入分析 Linux 内核链表

本文详细分析了 2.6.x 内核中链表结构的实现,并通过实例对每个链表操作接口进行了详尽的讲解。一、 链表数据结构简介 链表是一种常用的组织有序数据的数据结构,它通过指针将一系列数据节点连接成一条数据链,是线性表的一种重要实现方式。相对于数组,链表具有更好的动态性,建立链表时无需预先知道数据总量,可以随机分配空间,可以高效地在链表中的任意位置实时插入或删除数据。链表的开销主要是访问

2014-06-26 17:09:27 393

转载 stl 容器比较

List封装了链表,Vector封装了数组, list和vector得最主要的区别在于vector使用连续内存存储的,他支持[]运算符,而list是以链表形式实现的,不支持[]。Vector对于随机访问的速度很快,但是对于插入尤其是在头部插入元素速度很慢,在尾部插入速度很快。List对于随机访问速度慢得多,因为可能要遍历整个链表才能做到,但是对于插入就快的多了,不需要拷贝和移动数据,只需要改变

2014-06-26 16:21:14 996

转载 二叉树

登录 | 注册收藏成功确定收藏失败,请重新收藏确定标题标题不能为空网址标签 摘要公开取消收藏 全部设为已读查看所有通知

2014-06-26 15:55:25 530

转载 红黑树

介绍另一种平衡二叉树:红黑树(Red Black Tree),红黑树由Rudolf Bayer于1972年发明,当时被称为平衡二叉B树(symmetric binary B-trees),1978年被Leonidas J. Guibas 和Robert Sedgewick改成一个比较摩登的名字:红黑树。红黑树和之前所讲的AVL树类似,都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,

2014-06-26 14:57:00 398

转载 一致性 hash

consistent hashing 算法早在 1997 年就在论文 Consistent hashing and random trees中被提出,目前在 cache 系统中应用越来越广泛; 1 基本场景比如你有 N 个 cache 服务器(后面简称 cache ),那么如何将一个对象 object 映射到 N 个 cache 上呢,你很可能会采用类似下面的通用方法计算 object

2014-06-26 13:29:08 408

转载 thttpd源码小分析之Reactor pattern

这篇文章非常粗略地讨论thttpd的工作pattern: Reactor.关于pattern和model的区别,这里不多解释,参考这个说法: M(odel)-VC pattern.关于pattern的更多资料,参考 http://www.enterpriseintegrationpatterns.com/ .什么是ReactorReactor又称Dispatcher,用于同步IO,

2014-06-26 00:06:02 822

转载 libevent源码浅析: 事件处理框架

本文将从一个使用libevent的小例子出发,解释libevent处理事件的流程.例子如下:view sourceprint?01.static void fifo_read(int fd, short event, void *arg) {...}02. 03.int main (int argc, char **argv)

2014-06-25 23:57:42 714

转载 libevent源码浅析: 定时器和信号

Timer事件反应堆event_base包含了一个最小堆min_heap结构体的实例,以此维护注册到这个反应堆实例的定时器事件:view sourceprint?1.struct event_base {2.//其他成员3.struct min_heap timeheap;4.};回顾一下最小堆min_he

2014-06-25 23:56:16 734

转载 hash算法 (hashmap 实现原理)

Hash ,一般翻译做“ 散列” ,也有直接音译为“ 哈希” 的,就是把任意长度的输入(又叫做预映射, pre-image ),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。HASH

2014-06-25 12:24:25 532

转载 epoll源码分析(三)

epoll_wait系统实现如下:asmlinkage long sys_epoll_wait(int epfd,struct epoll_event __user *events,            int maxevents,int timeout){    int error;    struct file *file;

2014-06-24 23:36:10 686

转载 epoll源码分析(二)

上面的原型是epoll的fd所维护的主结构,下面是每一个具体的fd结构.以后每一个fd加入到epoll中,就会创建一个struct epitem结构,并插入至红黑树中。接着是epoll_ctl函数原型:asmlinkage long sys_epoll_ctl(int epfd,int op,int fd,struct epoll_event _

2014-06-24 23:32:54 536

转载 epoll源码分析(一)

当系统启动时,epoll进行初始化:static int __init eventpoll_init(void){    mutex_init(&pmutex);    ep_poll_safewake_init(&psw);    epi_cache = kmem_cache_create(“eventpoll_epi”,sizeof(st

2014-06-24 23:31:06 904

转载 高并发的epoll+多线程

epoll是linux下高并发服务器的完美方案,因为是基于事件触发的,所以比select快的不只是一个数量级。单线程epoll,触发量可达到15000,但是加上业务后,因为大多数业务都与数据库打交道,所以就会存在阻塞的情况,这个时候就必须用多线程来提速。 下面是来一个网络连接创建一个线程处理业务,业务处理完,线程销毁。实际测试结果不是很理想,在没有业务的时候的测试结果是2000个/s

2014-06-24 17:09:36 633

转载 libevent源码浅析: http库

libevent自带了一个http库,用它可以很简单的实现一个http服务器,本文非常简单地分析之.evhttpevhttp库有几个主要的结构体,它们之间的联系非常龌龊:其中,结构体event, min_heap, evsignal_info, eventop, event_base在前面几篇文章中已经介绍过了,这里不再啰嗦.evbufferevbuffer

2014-06-22 21:05:41 3011

转载 getopt和getopt_long函数

平时在写程序时常常需要对命令行参数进行处理,当命令行参数个数较多时,如果按照顺序一个一个定义参数含义很容易造成混乱,而且如果程序只按顺序处理参数的话,一些“可选参数”的功能将很难实现。在Linux中,我们可以使用getopt、getopt_long、getopt_long_only来对这个问题进行处理。[cpp] view plaincopy

2014-06-15 10:46:53 683

空空如也

空空如也

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

TA关注的人

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