联通公网ip申请 做网站,手机域名网站怎么做,百度认证官网,珠海网站优化培训TCP并发模型: 1.TCP多线程模型: 缺点: 1.创建线程会带来 资源开销 2.能够实现的 并发量 比较有限
2.IO模型: 1.阻塞IO: 没有…TCP并发模型: 1.TCP多线程模型: 缺点: 1.创建线程会带来 资源开销 2.能够实现的 并发量 比较有限
2.IO模型: 1.阻塞IO: 没有数据到来时,可以让任务挂起 节省CPU资源开销,提高系统效率 2.非阻塞IO: 程序未接收到数据时一直执行 效率很低 3.异步IO 只能绑定一个文件描述符用来 读取数据 4.多路复用IO select 1.select监听的集合中的文件描述符有 上限限制 2.select有 内核层 向 用户层数据空间 拷贝 的过程,占用系统资源开销 3.select必须 轮询检测 产生 事件 的文件描述符 4.select 只能工作 在 水平触发 模式(低速模式) 无法工作 在 边沿触发 模式(高速模式) poll 监听的集合中的文件描述符有 没有上限限制 1.poll有 内核层 向 用户层 数据空间 拷贝 的过程,占用系统资源开销 2.poll必须 轮询检测 产生 事件 的文件描述符 3.poll 只能工作在水平触发模式(低速模式) 与select相同 无法工作在边沿触发(高速模式)
水平触发产生事件通知没处理完成下次继续通知此事件阻塞在这里直到处理完成此事件低速。
边沿触发产生事件的时刻通知只通知一次下次通知其它事件不阻塞。
poll内部链表结构所以无上限。 3.函数接口: 1.select int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); 功能: select 监听 文件描述符集合 中 是否 有文件描述编程 ready状态 select 监听 文件描述符集合 中 若有状态 将没有ready状态的T除 若无状态将阻塞继续等待 参数: nfds: 最大文件描述符的值 1 readfds: 读 文件描述符集合 writefds: 写 文件描述符集合 exceptfds: 其余 文件描述符集合 timeout: 等待的时长 NULL 一直等待超时处理 返回值: 成功 返回 文件描述符集合中 的 文件描述符个数 失败 返回 -1 void FD_CLR (int fd, fd_set *set); 功能: 将文件描述符 fd 从集合中清除 int FD_ISSET (int fd, fd_set *set); 功能: 判断文件描述符 fd 是否仍在集合中 void FD_SET(int fd, fd_set *set); 功能: 将文件描述符 fd 加入到 集合中 void FD_ZERO(fd_set *set); 功能: 将文件描述符集合 清0 2.poll int poll(struct pollfd *fds, nfds_t nfds, int timeout); 功能: 监听 文件描述符集合 是否 有事件发生 参数: fds: 监听 文件描述符集合 数组空间首 地址 nfds: 监听 文件描述符集合 元素个数 timeout: 等待的时间 非0 -1 一直等待 返回值: 成功 返回 产生事件的文件描述符 个数 失败 返回 -1 struct pollfd { int fd; /* file descriptor */ short events; /* requested events */ short revents; /* returned events */ }; fd: 监听的文件描述符 events: 要监听的 事件 POLLIN: 是否 可读 POLLOUT: 是否 可写 revents: 实际 产生的 事件 3.epoll int epoll_create(int size); 功能: 创建 一张 内核事件表 参数: size: 事件的 个数 返回值: 成功返回文件描述符 失败返回-1 epoll_ctl int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event); 功能: 维护 epoll时间表 参数: epfd: 事件表 的文件描述符 op: EPOLL_CTL_ADD 添加事件 EPOLL_CTL_MOD 修改事件 EPOLL_CTL_DEL 删除事件 fd: 操作 的文件描述符 event: 事件 对应的 事件 typedef union epoll_data { void *ptr; int fd; uint32_t u32; uint64_t u64; } epoll_data_t; struct epoll_event { uint32_t events; /* Epoll events */ epoll_data_t data; /* User data variable */ }; 返回值: 成功返回0 失败返回-1 epoll_wait int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout); 功能: 监听 事件表中 的 事件 参数: epfd: 文件描述符 events: 存放 实际产生事件 的数组空间 首地址 maxevents: 最多 存放事件 的 个数 timeout: 设定监听的时间超过该时间 则不再监听 -1 一直监听直到有事件发生 返回值: 成功返回产生事件的文件描述符个数 失败返回-1 如果时间达到 仍没有事件发生 返回0