【发布时间】:2013-12-03 00:35:19
【问题描述】:
我正在 linux 中设计一个 C 程序,其中有两个线程。一个主线程是执行主函数处理的 event_processor_thread。第二个线程是一个始终在后台运行的 event_dispatcher 线程,实时读写多个接口(非阻塞异步 i/o)
我在网上做了一些研究,发现实现non-blocking socket i/o的最好方法可以通过
- libevent
select()
我选择了后者,因为它更容易,而且我最多有 4 个接口可以读取/写入。
我很清楚使用readfds 的听/读机制,但我不确定如何使用writefds!如果我将我的数据从 event_processor_thread 放到共享内存中,并让这个事件调度线程从共享内存中读取它并使用send() 写入,那么 select 是否会自行将数据发送到套接字?这就是我需要在select() 中使用writefds 的原因吗?
如果我的问题不清楚,我深表歉意,我基本上想要的是有一个非阻塞 i/o 线程来将事件发送到事件处理器线程或从事件处理器线程发送到外部接口。高度赞赏这方面的任何投入。谢谢!
【问题讨论】:
-
你将如何实现一个基本的事件循环? stackoverflow.com/questions/658403/…
-
请注意,libevent 方法更易于移植到不同的平台。
标签: c linux multithreading sockets select