随笔分类 -  SbWebServer

摘要:基于生产者消费者模型的线程池设计: 数据结构: 成员: 1.一个队列m_queue.其中存放Task,也就是任务,生产者线程,也就是主线程,往这个队列中push;消费者,也就是工作线程,不停地从其中拿走Task去工作。 关于Task,原型为boost::function<void()> Task; 阅读全文
posted @ 2019-09-17 00:27 李湘沅 阅读(310) 评论(0) 推荐(0) 编辑
摘要:EPOLLSHOT的作用主要用于多线程中 epoll在某次循环中唤醒一个事件,并用某个工作进程去处理该fd,此后如果不注册EPOLLSHOT,在该fd时间如果工作线程处理的不及时,主线程仍会唤醒这个时间,并另派线程池中另一个线程也来处理这个fd。 为了避免这种情况,需要在注册时间时加上EPOLLSH 阅读全文
posted @ 2019-08-06 09:43 李湘沅 阅读(927) 评论(0) 推荐(0) 编辑
摘要:对于一个网站页面来说,不同的页面被访问的可能性不同,像主页被访问的概率是最大的。 如果利用这个特点,对高访问概率的页面存入缓存,这样每次连接过来就不用每次都要经历本地找文件,打开这样一个过程。 对于这个缓存的设计,首先考虑: 1.主页一定是一直在缓存中的。 2.用一个哈希表来建立filename > 阅读全文
posted @ 2019-07-19 22:43 李湘沅 阅读(224) 评论(0) 推荐(0) 编辑
摘要:1.为什么引入非阻塞IO+IO多路复用: 以accept为例:accept等待连接时,陷入阻塞,而在阻塞期间相当于服务器是没有在工作的。 以read为例:当当前处理的socket中已无数据,但对端的数据尚未到达时,此时调用read,陷入阻塞,而在阻塞期间如果有其他客户端发起请求,是无法连接到服务器的 阅读全文
posted @ 2019-07-13 22:28 李湘沅 阅读(298) 评论(0) 推荐(0) 编辑
摘要:最简单版本的WebServer: 1.服务端初始化工作: a).创建主动套接字:initList(port) b).转为监听套接字:initList(port) c).等候和接受连接:Accept(listenfd,&clientaddr,&sizeof(clientaddr)); 2.处理客户端的 阅读全文
posted @ 2019-07-01 22:58 李湘沅 阅读(346) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示