创建并初始化线程池

创建并初始化线程池–》threadpool.h, 创建并初始化&脱离(执行完后)子线程,每个子线程信号量wait阻塞【1】
创建套接字:int listenfd = socket( PF_INET, SOCK_STREAM, 0 );
端口复用:setsockopt( listenfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof( reuse ) );
绑定:ret = bind( listenfd, ( struct sockaddr* )&address, sizeof( address ) );
监听:ret = listen( listenfd, 5 );
多路复用:addfd( epollfd, listenfd, false );
while无限循环,使用 epoll_wait 函数等待事件发生
- 新客户端连接进来,accept连接,初始化连接信息,把描述符添加到epoll队列中。
- 有可读事件,主线程读取所有数据,把连接数据加到线程池,任务添加到请求队列,唤醒等待中的线程m_queuestat.post(); -->子线程被唤醒执行,取出任务队列中的第一个任务执行,也就是解析请求的过程,当得到一个正确的HTTP请求时,我们分析目标文件的属性,如果目标文件存在、对所有用户可读且不是目录,则使用mmap将其映射到内存地址m_file_address处,并告诉调用者获取文件成功。根据解析的HTTP请求内容生成响应,修改epoll队列事件类型,告诉
epoll 服务器已准备好向客户端发送数据。
- 有可写事件,写完所有数据。

你可能感兴趣的:(python)