httpd高并发的实现

来源:互联网 发布:太平洋官方软件 编辑:程序博客网 时间:2024/06/05 06:48

框架:httpd+socket+IO多路复用(epoll)+多线程

实现:创建套接字并绑定端口号,epoll_create 5个IO,并把listen套接字的fd注册到epoll中,等待fd触发。然后开始死循环,listen套接字触发后,产生新的connect套接字并注册到epoll中。然后connect套接字触发,利用主线程接收将客户端发送的请求,将接收到的信息传给子线程并利用httpd解析,然后回送给主线程并返回给客户端。

注意:
多线程的使用及同步:互斥锁加条件变量

add()  {    pthread_mutex_lock(lock_s);    sum++;    pthread_mutex_unlock(lock_s);    if(sum>=100)    pthread_cond_signal(&cond_sum_ready);  }    print  {    pthread_mutex_lock(lock_s);    while(sum<100)    pthread_cond_wait(&cond_sum_ready, &lock_s);    printf(“sum is over 100!”);    sum=0;    pthread_mutex_unlock(lock_s);    return OK;  }  //pthread_cond_wait(),必须在pthread_mutex_lock()之后执行,pthread_cond_wait()在进入阻塞之后释放锁,等待pthread_cond_signal()触发之后再重新加锁;所以pthread_cond_signal(),则需要在pthread_mutex_unlock()之后执行。  //示列与主题无关

两个锁与islock == 一个锁(没有islock)
主要函数:pthread_cond_wait 主要文件:pthreadpoll.cpp

原创粉丝点击