服务器模型里面不是每个请求来了会用一个线程处理业务逻辑么,在这个线程里面只需处理这个请求的FD啊,还用epoll干嘛?没明白 谁能简要用代码说明一下多线程+epoll模型到底怎么回事? 这个问题困惑我一个多月啦 谢谢
目前想到了用心跳的方法: 做一个定时器,定时为每个fd对应的次数加,当这个数超过count=3的时候服务端默认是client端断线了,把它close掉。在接收心跳活接收任务里,把fd对应的数清零。 epoll_wait的超时取最近的一个就行了,单线程版本很容易做。多线程版本就得加上线程锁了,而且在一个socket事件发生后,还需要把它的超时回调方法从队列中移除,防止多个线程操作同一个处理对象。这个有点麻烦,需要从队列中快速找到并移除它,...
问2个select/epoll和多线程的问题 1. select 是进程限定fd数,还是线程限定fd数. 假如我创建1025个线程,每个线程管一个TCP连接。用select是否可以 2. 很多描述epoll优点的,都是基于 使用一个线程epoll所有TCP连接 这种情况。 我的程序是使用多线程,一个线程epoll一个TCP连接。这样 epoll相对select还有没有优势
epoll 多线程使用问题 关于epoll 的基本用法,我相信大家很熟悉 简单描述一下 在epoll过程中, 我们基本是epoll_wait 等待到我们 想要的事件, 并且从epoll 返回的event 里面 找出事件,找到相应 的socket 和 unit, 进行操作 我简单描述一下 我的做法 map socket, void * socket 代表 目前的socket void * 代表 和它相关的unit 对象 当unit 希望等待socket 获取数据, 那么 我们首先将socket ,和...
我想问个关于epoll_wait的问题,我的程序在初始化的时候根据CPU的核数,还有数量来分配了适当的线程数,每个线程创建一个epoll对象,工作线程起来后,会阻塞在epoll_wait函数处,当有用户发送数据包的时候,会进行处理,为了避免线程同步带来的问题,我以会话为单位来进行操作。每个会话只会在指定的epoll对象中,由于程序的功能所需,需要设定计时器。保证1分钟切换会话中的下一个用户,由于在这个过程中有可能会出现:用户的添加...
多线程和epoll 问题, epoll_wait 不返回
设计的思想是这样的。
起一个子线程,这个线程称会不断建立与服务器的连接。
主线程则会 不断在epoll_wait 等待返回然后处理。 我这里epoll_wait 不返回。
通过网络监控 发现 子线程的的连接应该建立起来了
有三步握手了。 但我的程序一直不返回
还有2点 read write 的 阻塞和非阻塞有什么区别吗?
connect 的阻塞和非阻塞有什么区别?
[code]#include
本人最近用epoll与多线程写服务器程序!现在有几个问题想请教一下!希望大虾们能帮助一下! 现在主要问题是:main函数的主线程有两个变量,一个是epfd是epoll_create后的文件描述符,另一个是epoll_event ev变量! 用过epoll的人都知道,在网络read之后要对epoll监听的描述符进行修改,修改为ev.events = epollOUT|epollET 然后调用epoll_ctl函数! 不过现在是我的程序这个修改要在子线程中完成一个任务后进行!而不是在主线程中!我...
我最近在网上找了一个程序后改写成自己的程序!以前用进程模型一个客户连接进来后就fork一个,然后父进程把ACCEPT的描述符关闭。 这样每个进程都有自己的独立描述符!那么就不会受到1024个文件描述符的限制!但是,进程创建与进程调度还有内存的消耗系统是吃不消的!后来我就到网上找了一个用epoll与线程的模型后自己改了一下!后来发现在一个很大的BUG,就是这个模型最多只可以有1024个连接就挂掉了! 我把代码上传到附件!大家...