httpd高并发的实现

框架: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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值