自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 资源 (3)
  • 问答 (1)
  • 收藏
  • 关注

原创 epoll_data_t里面的void *ptr; int fd; u32; u64 分析

首先注意这是一个联合体。真正使用起来,事实上第一个就足够了,也就是void *,后面三个都可以用这个给“包装”起来,因为void * 是c里头的“泛型”。楼主不妨思考为什么会这么设计。以网络编程为例,当设计处理数据包的回调函数的时候,通常你面对的数据类型都是不确定的,依赖于数据包的结构。如果让你来设计epoll_data_t,你会怎么设计???三思~~如果我设计的话,直接一个void *搞定,就如

2011-06-27 18:35:00 6257

原创 Linux下高性能网络编程中的几个TCP/IP选项

Linux下高性能网络编程中的几个TCP/IP选项 转自:http://blog.chinaunix.net/u/12592/showart.php?id=2064847最近在新的平台上测试程序,以前一些没有注意到的问题都成为了性能瓶颈,通过设置一些TCP/IP选项能够解决一部分问题,当然根本的解决方法是重构代码,重新设计服务器框架。先列出几个TCP/IP选项:选项man 7 sock

2011-06-26 21:21:00 817

原创 EPOLL的工作模式 ET and LT

近日又继续学习了一下EPOLL的工作模式,这会基本上搞清楚了,因而撰写了此篇文档进行描述。先来一段网上的介绍文档:EPOLL事件分发系统可以运转在两种模式下:Edge Triggered (ET)、Level Triggered (LT)。LT是缺省的工作方式,并且同时支持block和no-block socket;在这种做法中,内核告诉你一个文件描述符是否就绪了,然后你可以对这个就绪的fd进行I

2011-06-21 14:28:00 529

原创 linux动态线程池--原理,这儿的代码不完整

本文给出了一个通用的线程池框架,该框架将与线程执行相关的任务进行了高层次的抽象,使之与具体的执行任务无关。另外该线程池具有动态伸缩性,它能根据执行任务的轻重自动调整线程池中线程的数量。文章的最后,我们给出一个简单示例程序,通过该示例程序,我们会发现,通过该线程池框架执行多线程任务是多么的简单。   为什么需要线程池 目前的大多数网络服务器,包括Web服务器、Email服务器以及数据库服务器等都具有

2011-06-16 15:38:00 2007

原创 linux动态线程池--原理,这儿的代码不完整

本文给出了一个通用的线程池框架,该框架将与线程执行相关的任务进行了高层次的抽象,使之与具体的执行任务无关。另外该线程池具有动态伸缩性,它能根据执行任务的轻重自动调整线程池中线程的数量。文章的最后,我们给出一个简单示例程序,通过该示例程序,我们会发现,通过该线程池框架执行多线程任务是多么的简单。   为什么需要线程池 目前的大多数网络服务器,包括Web服务器、Email服务器以及数据库服务器等都具有

2011-06-16 15:37:00 692

原创 undefined reference to `__gxx_personality_v0' collect2: ld returned 1 exit status

[root@localhost dss]# gcc -o abc abc.cpp/tmp/ccY3hmyr.o(.eh_frame+0x11): undefined reference to `__gxx_personality_v0collect2: ld returned 1 exit status[root@localhost dss]# gcc -o abc abc.cpp

2011-06-16 14:17:00 3514

原创 Linux线程池

/*解析:这段代码创建了三个线程,10个任务。线程池的结构是CThread_pool,任务的结构是worker,他们都是一个连表。 程序先用pool_init创建拉三个线程。然后每个线程执行函数thread_routine。thread_routine在运行到pthread_cond_wait(&(pool->queue_ready),&(pool->queue_lock));时,等待共享变量被激

2011-06-13 15:59:00 837

原创 Linux线程池

/*解析:这段代码创建了三个线程,10个任务。线程池的结构是CThread_pool,任务的结构是worker,他们都是一个连表。 程序先用pool_init创建拉三个线程。然后每个线程执行函数thread_routine。thread_routine在运行到pthread_cond_wait(&(pool->queue_ready),&(pool->queue_lock));时,等待共享变量被激

2011-06-13 15:59:00 589

原创 Unix网络编程 提高 TCP I/O 性能的3点经验

用John Nagle算法最小化报文传输延时通过 TCP socket 进行通信时,数据都拆分成了数据块,放到一个TCP报文中为了达到最好的性能,总希望尽可能多的可用数据来填充每个报文已达到为最大报文段长度(maximum segment size 或MSS)。当没有足够的数据来填充 payload 时,TCP 就会采用 Nagle 算法自动将一些小的缓冲区连接到一个报文段中。这样可以通过最小化所

2011-06-09 16:09:00 702

原创 知名公司薪水(转帖)2007

知名公司薪水(转帖)2007-11-24 13:38所有信息均为真实信息,请勿对号入座,也请勿妄自菲薄;所有信息均基于个人经验,不 保证具有代表性,也不保证完全准确;所有观点均为个人观点,可以借鉴,请勿遵照。 通常情况下,美国公司的薪水会比其他公司多些,但是起伏较大,原因是大多数的美国公 司历史短,业务还没diversified。当然,IBM和GE等除外。 说几个我知道的 某男,DELL,15K/

2011-06-09 12:31:00 3572

原创 linux 读书笔记

1:管道:×管道可以在同组进程通讯。如果要在不同组进程间用管道通讯,那么要用FIFO。 --数据的读出和写入:一个进程向管道中写的内容被管道另一端的进程读出。写入的内容每次都添加在管道缓冲区的末尾,并且每次都是从缓冲区的头部读出数据。 --如果没有读进程,那么管道的写操作就会失败 --管道写端和读端的声明:int pipe_fd[2]; pipe()的调用必须在fork之前 --管道的读是在文件的

2011-06-09 10:42:00 396

原创 linux 读书笔记

1:管道:×管道可以在同组进程通讯。如果要在不同组进程间用管道通讯,那么要用FIFO。 --数据的读出和写入:一个进程向管道中写的内容被管道另一端的进程读出。写入的内容每次都添加在管道缓冲区的末尾,并且每次都是从缓冲区的头部读出数据。 --如果没有读进程,那么管道的写操作就会失败 --管道写端和读端的声明:int pipe_fd[2]; pipe()的调用必须在fork之前 --管道的读是在文件的

2011-06-09 10:42:00 325

原创 linux 读书笔记

1:管道:×管道可以在同组进程通讯。如果要在不同组进程间用管道通讯,那么要用FIFO。 --数据的读出和写入:一个进程向管道中写的内容被管道另一端的进程读出。写入的内容每次都添加在管道缓冲区的末尾,并且每次都是从缓冲区的头部读出数据。 --如果没有读进程,那么管道的写操作就会失败 --管道写端和读端的声明:int pipe_fd[2]; pipe()的调用必须在fork之前 --管道的读是在文件的

2011-06-09 10:41:00 362

原创 一个进程仅存在给定类型的一个挂起信号,同一进程同样类型的其他信号不被排队

任何时候,一个进程仅存在给定类型的一个挂起信号,同一进程同样类型的其他信号不被排队,只被简单的丢弃:理解--即使连续发送SIGQUIT信号,进程也只有处理一个SIGQUIT信号。 Please read the picture; It is screen shot from book"Linux kernal"

2011-06-03 15:47:00 507

转载 sigprocmask和sigsuspend转

有2个函数 sigprocmask和sigsuspendsigprocmask系统调用用于改变当前阻塞信号集,比如进程想阻塞SIGMIN+1信号。就把这个信号加入掩码中,然后调用 sigprocmask具体参数见man手册。而sigsuspend是挂起进程,等待信号。等收到信号后,继续执行进程。见如下程序:sigemptyset(&zeromask); sigemptyset(&new

2011-06-03 13:40:00 1139

原创 sigsuspend的理解

/* sigsuspend的使用 sigprocmask和pause连起来用可以实现sigsuspend的功能;但是还是使用sigsuspend函数,应为sigsuspend是原子操作 */ #include #include #include #include volatile sig_atomic_t quitflag; static void sig_handler(int sign

2011-06-03 13:38:00 2532

原创 sigprocmask理解

/*int sigprocmask(int how, const sigset_t *set, sigset_t *oldset); 功能描述:设定对信号屏蔽集内的信号的处理方式(阻塞或不阻塞)。 用法: #include int sigprocmask(int how, const sigset_t *set, sigset_t *oldset); 参数: how:用于指定信号修改的方式,可能

2011-06-03 13:37:00 769

原创 volatile 和 sig_atomic_tlinux

volatile 和 sig_atomic_tlinux相关 2008-10-07 12:58:56 阅读39 评论0 字号:大中小 订阅 volatile 和 sig_atomic_tvolatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,每次使用时都需要去内存里重新读取它的值,与volatile变量有关的运算,不要进行编译优化,以免出错,(VC++ 在产生release版可执行码时会进行编译优化,加volatile关键字的变量有关的运算,将不进行编

2011-06-02 17:01:00 568

转载 sigterm sigint sigkill 区别

我看网上应该有不少搜索这个区别的问题,但是回答的都不全面,其中sigterm与sigint尤其有一点区别比较重要,但大都没有提及,今天我就遇到了这个问题,纠结了20分钟才搞明白咋回事。 首先,对于说这几个信号都是终止程序运行的说法不太准确,因为程序收到信号后,如果不对信号处理,就会导致程序退出,但如果程序捕获信号进行处理,按照它的逻辑,它是不一定会退出的。 在这三个信号中,sigkill是不能被捕获的,程序收到这个信号后,一定会退出。这就是kill -9一定能保证将程序杀死的原因。 下面说一下sigterm

2011-06-01 15:40:00 2266

Screen_Recorder_FULL_Piaodown

Screen_Recorder_FULL_Piaodown

2016-06-16

ee android

wwwwwwwwwwwwwwwwwwwwwww

2011-05-27

ConnectSQL

VC连接SQL VC连接SQL VC连接SQL VC连接SQL VC连接SQL VC连接SQL VC连接SQL VC连接SQL

2009-12-01

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

TA关注的人

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