epoll 多线程使用问题 关于epoll 的基本用法,我相信大家很熟悉 简单描述一下 在epoll过程中, 我们基本是epoll_wait 等待到我们 想要的事件, 并且从epoll 返回的event 里面 找出事件,找到相应 的socket 和 unit, 进行操作 我简单描述一下 我的做法 map socket, void * socket 代表 目前的socket void * 代表 和它相关的unit 对象 当unit 希望等待socket 获取数据, 那么 我们首先将socket ,和...
多线程和epoll 问题, epoll_wait 不返回
设计的思想是这样的。
起一个子线程,这个线程称会不断建立与服务器的连接。
主线程则会 不断在epoll_wait 等待返回然后处理。 我这里epoll_wait 不返回。
通过网络监控 发现 子线程的的连接应该建立起来了
有三步握手了。 但我的程序一直不返回
还有2点 read write 的 阻塞和非阻塞有什么区别吗?
connect 的阻塞和非阻塞有什么区别?
[code]#include
请问,我程序使用两个线程,主线程创建了epoll,并accept网络连接,并接受来自客户端的数据,并处理数据把结果存到一个结果队列中,结果队列保存数据格式是
主线程 : 创建epoll accept 线程 : 接受连接 poll wait 线程 : 等待数据,如果有数据到来,将epoll_event*赋给下面的"事务处理"线程 事务处理 栈程 : 如果recv == 0. 就epoll_ctl 将 连接fd从epoll中删除.并且调用close函数关闭该fd. 如果去掉事务处理线程,将事务处理工作在poll wait线程中做的话,epoll可以正常工作.但是一分开,在连接关闭的时候,epoll就会不断收到重复的关闭通知.假设fd=7.那么就不断地有recv ( ...
请问多个线程,一个线程跑一个epoll接受客户的数据。 1:开比较少的线程 , 每个线程接受的socket多一些. 2:开比较多的线程 , 每个线程接受的socket 少一些。 (是不是这样每个epoll在epoll_wait中的循环会降低效率) 谢谢........ 大家说哪一种相对比较好。
最近看了下epoll,按照epoll模型写了一个测试程序。监听一个端口,处理大量链接 。 接下来,我就想,同时监听多个端口。 我将创建好的socket_fd存储在数组sock_fd[]中。 我想请教一下,接下来我该怎么做呢。
使用了epoll如下程序: int file_fd = -1; struct epoll_event event; int epoll_fd = 0; epoll_fd = epoll_create(256); if (epoll_fd < 0) { return -1; } file_fd = open("a", O_RDONLY | O_NONBLOCK); if (file_fd < 0) { return -1; } set_non_blocking(file_fd); event.data.fd = ...
这只是一个线程池的框架还有许多不足 : 没有实现server->client数据发送 , 还有许多细节没有完善。 Lock.cpp : 锁的操作 , 读锁可以并发 , 写锁独占. Queue.h : 队列的封装 , 队列的读和写都加了锁的保护. Socket.cpp : 套接口的简单封装. Thread.cpp : 线程的封装实现了些简单的线程停止,运行等功能 , 启动别的线程的时候需要继承次类. Worker.cpp : 用户接口类 , 用户需继承此类。 ListenThread.cpp(继承Threa...