`
dazhilao
  • 浏览: 246039 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

【转】再论epoll

阅读更多
原文地址:http://hi.baidu.com/netpet/blog/item/bebc3ba8d671a3b7ca130cf5.html
学习时间的过程终会有反复,其中也包括一些错误,上午对于前一篇关于epoll的文章进行了增改,下午就觉得有些不妥,重新编辑感觉不太容易剥楼错误,现在有些新的变化在这里重新论述。

上午说的在epoll里面进行耗时任务的时候做一个任务调度器(比如当服务器连接外部资源),这说明我只了解了epoll的一部份,没有充分认识到它的普遍意义的应用,其实对于外部连接epoll可以作为服务器端的任务调度器使用,但是它同样适用于主动式连接的socket,换言之,如果服务器需要连接外部socket资源也同样可以将它连接的道德socket fd加入epoll的监视,这样epoll的调度就更有广泛了,所有需要socklet交互的部分都可以交由epoll,然后他负责监制EPOLLIN和EPOLLOUT两个事件,这两个事件的组合多次利用就可以构成整个服务事件驱动机制,所以我上午说的任务调度其也是多余的。

     有人可能想了,那么对于多核服务器不久没有任何优势了么?我的设想是这样的,先在单线程的模型上完成开发,如果想扩展到多核,可以在epoll的下面再次构建一个多线程的任务调度器,也就是将epoll检测到的事件再次保存到一个结构体,用多线程去读取并处理事件,这样不会影响大部分的代码,真正的程序不是直接响应epoll事件,而是在新的任务调度器下面统一处理epoll事件的副本,这样就有epoll主动事件驱动调用变成了异步的,多线程并行执行的模型,但是每个连接同一时间也只有一个线程在处理,现在还没有经过实际测试,不确信对于性能的影响如何。

    如果所有实际的处理过程暂用cpu很短那么加上我上面设计的一层任务调度就是多余的,因为所以的问题都会集中体现在网络上,这不是服务器所能解决的,如果网络快到了事件在等待任务,那么这种模型才有可能有较好的表现,所以是否应用还是要看具体的服务内容,事实证明单线程已经处理的足够快了,每秒1万页的处理速度能满足绝大多数的需求,所以就设计而言,关键问题还是要解决瓶颈,而不是将所有想到的好技术都应用上,瓶颈可能还没有得到解决,反而更加浪费cpu资源。

    所以我觉决定还是全部以epoll驱动去做这个web架构,毕竟nginx等都有上佳的表现,这样看来做个代理或者反项代理也是很容易的,还可以更加节约资源

    看了这么久才算对于nginx等处理模型有了个大致的了解,起初打算更改它的代码,后来发现太麻烦了,所以重新自己架构,走下来发现只要了解思路了具体的技术是很快的,不然看别人的代码太辛苦了
分享到:
评论

相关推荐

    较全的二叉排序树程序

    对于有两个子节点的情况,通常替换为右子树中最小值或左子树中最大值的节点,然后再删除这个替换节点。 4. **二叉排序树的平衡问题**: 如果输入数据的顺序很不理想,可能会导致二叉排序树退化成链表,此时查找...

    飞鸽传书_c语言完整版.rar

    例如,select()、poll()或epoll()系统调用可以监控多个文件描述符(套接字)的状态,以便在有数据可读或可写时进行相应的操作。 5. **TCP/IP协议栈**:"飞鸽传书"基于TCP协议,这是一种面向连接的、可靠的传输层...

    2014PHP 异步并行编程_韩天峰(PHPCONCHINA2014)

    - **非阻塞IO**:利用Linux内核提供的epoll机制,实现了高效的非阻塞I/O操作。 - **协程支持**:通过轻量级线程技术,使得PHP代码可以并发执行而不会阻塞主线程。 - **多进程/多线程**:支持创建多个进程或线程来...

    Netty的技术的总结(Marshalling编解码,tcp的拆包粘包,webservice),包括新手入门源码,注释清楚,绝对物超所值

    通过以上知识点的学习和实践,可以掌握Netty的基本用法,进一步深入研究则可以涉及Netty的高级特性,如NIO、Epoll、线程模型等。在遇到问题时,可以参考Netty的官方文档,参与社区讨论,甚至阅读源码以深化理解。总...

    IJTLLNT22.zip_网络编程_C++_

    3. **异步I/O模型**:如事件驱动编程(如epoll)或异步库(如Boost.Asio)可以帮助开发者处理大量并发连接。 4. **协议实现**:TCP/IP协议栈中的HTTP、FTP、UDP等协议,可以在C++中进行实现和封装。 5. **错误处理和...

    超高频面试题.zip

    - I/O模型:阻塞I/O、非阻塞I/O、多路复用I/O(如select、poll、epoll)。 - 死锁:条件、避免与解除策略。 4. **数据库**: - ACID特性:原子性、一致性、隔离性和持久性。 - SQL基础:增删改查语句、JOIN操作...

    C++网络爬虫项目

    始人埃文•威廉姆斯提出了“域名已死论”,好记的域名不再重要,因为人们会 通过搜索进入网站。搜索引擎排名对于中小网站流量来说至关重要。了解搜索 引擎简单界面背后的技术原理其实对每一个希望在互联网行业有所...

    Linux多线程服务端编程:使用muduo C++网络库

    1.9再论shared_ptr 的线程安全.. . . . . . . . . . . . . . . . . . . . . . . . 17 1.10shared_ptr 技术与陷阱. . . .. . . . . . . . . . . . . . . . . . . . . . . . 19 1.11对象池. . . . . . . . . . . . . ....

Global site tag (gtag.js) - Google Analytics