linux c epoll mysql_epoll在socket通信中的应用

当服务器需要服务多个客户时,需要使用并发通信,实现并发通信有以下几种方法:

2、epoll

step1: int epfd = epoll_create(intsize);  //通知内核需要监听size个fd

step2:   int epoll_ctl(int epfd, int op, int fd, struct epoll_event*event); //注册事件,一般为server fd,即listener

step3: int epoll_wait(int epfd, struct epoll_event * events, intmaxevents, int timeout); //等待事件触发,等侍注册在epfd上的socket fd的事件的发生,如果发生则将发生的sockct fd和事件类型放入到events数组中。注:发生的条件为events[n].data.fd == listener,即如果是主socket的事件的话,则表示有新连接进入了,进行新连接的处理。

step4:将这个客户端的event通过epoll_ctl加入到epoll的监听队列里面

step5:events[n].data.fd != listener时,意味着不是主socket的事件,是一个用户socket的事件,可以用来处理这个用户socket的事情

以下内容摘自知乎:

服务器后端框架其中大致差不多,可从以下几个部分去综合考虑设计:

一、套接字IO模型(Linux)

1 应用场景:a.登陆低并发,大量长连接,少量活动连接,TCP;b.业务未知,对事件的响应时间未知。

2 进(线)程模型设计:1.a中的场景是最适合使用epollIO复用模型,这种情况下,epoll的效率比其他IO复用模型(select,poll)要高效。如果业务简单(不耗时,不阻塞):单进程+eppll足以应付,在epoll的主循环中依次处理事件即可。业务比较耗时:单进程多线程+epoll或多进程+epoll,主进(线)程负责监听和分发事件,工作进程(线程)处理事件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值