• 上篇文章使用linux内核2.6提供的epoll机制实现了一个反应式echo服务器,使用反应式服务器的最大好处就是可以按cpu的数量来配置线程池内线程的线程数而不是根据客户端的并发量配置线程池。我是第一次使用pthread库来写线程池,使用的是工作队列方式的线程池。我感觉作队列方式的线程池可以当成一种设计模式来用的,在很多平台上都是可以按这种方式来实现线程池,从win32 ,unix到jvm都是适用的

     

    #include <iostrea...
  • 大家苦苦的为在线人数的增长而导致的系统资源吃紧上的问题正在发愁的时候,Linux 2.6内核中提供的System Epoll为我们提供了一套完美的解决方案。传统的select以及poll的效率会因为在线人数的线形递增而导致呈二次乃至三次方的下降,这些直接导致了网络服务器可以支持的人数有了个比较明显的限制。

    自从Linux提供了/dev/epoll的设备以及后来2.6内核中对/dev/epoll设备的访问的封装(System Epoll)之后,这种...
  • epoll用到的所有函数都是在头文件sys/epoll.h中声明的,下面简要说明所用到的数据结构和函数:
    所用到的数据结构
    typedef union epoll_data {
                    void *ptr;
           ...
  • EPOLL技术 - [Linux]

    2007-12-05

    EPOLL技术
    作者:黄明远

    在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。
    相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且,在linux/posix_types.h头文件有这样的声明:
    #define __FD_SETSIZE&nb...
  • 数据传输
      Send()和recv()这两个函数用于面向连接的socket上进行数据传输。
      Send()函数原型为:
      int send(int sockfd, const void *msg, int len, int flags);
    Sockfd是你想用来传输数据的socket描述符;msg是一个指向要发送数据的指针;Len是以字节为单位的数据的长度;flags一般情况下置为0(关于该参数的用法可参照man手册)。
      Send...
  • 在UNIX程式设计中,学会fork及signal的运用,算是相当基本的功夫。

    fork()及signal经常运用在daemon守护神这一类常驻程式,另外像 a4c.tty/yact/chdrv这些中文终端机程式也有用到,一般如 Mozilla/Apache/Squid等大程式几乎都一定会用到。

    虽然在UNIX下的程式写作,对thread的功能需求并非很大,但thread在现代的 作业系统中,几乎都已经存在了。pthread是Linux上的thread函...
  • 什么是Socket
      Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。要学Internet上的TCP/IP网络编程,必须理解Socket接口。
      Socket接口设计者最先是将接口放在Unix操作系统里面的。如果了解Unix系统的输入和输出的话,就很容易了解Socket了。网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的...
  • 1、Java

    Java编程语言(第三版)---Java四大名著----James Gosling(Java之父)

    Java编程思想(第2版)----Java四大名著----Bruce Eckel

    Java编程思想(第3版)----Java四大名著----------------Bruce Eckel

    JAVA 2核心技术 卷I:基础知识(原书第7版)---Java四大名著-----Cay Horstmann...
  • linux多线程 - [Linux]

    2007-11-16

    linux多线程设计#include <pthread.h>

    1、创建

    int pthread_create( pthread_t *tid, const pthread_attr_t *attr, void *(* func) (void *), void *arg );

    attr: 线程属性包括:优先级、初始栈大小,是否应该成为一个守护线程。

    缺省设置,NULL

    后面是线程要...
  • 多线程补充知识 - [Linux]

    2007-11-16

    多线程补充知识


    1、 编写Linux下的多线程程序,需要使用头文件pthread.h,连接时需要使用库libpthread.a。顺便说一下,Linux下pthread的实现是通过系统调用clone()来实现的。clone()是Linux所特有的系统调用,它的使用方式类似fork。

    2、 函数pthread_join用来等待一个线程的结束。函数原型为:
      extern int pthread_join __P ((pthread_t...