采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师,我有一个疑问。多路复用监听io流,对于epoll而言,有数据到达就会收到消息,然后去执行,如果此刻同时来了很多io流,epoll是不是也是一个一个顺序的去处理???如果是顺序处理,那么它和多线程并行处理比是不是比较慢?
微观上一定会有这样顺序执行,但epoll做到了io复用的最优处理。
通常来说epoll和多线程不会具备很大比较。
论项目的开发而言,epoll 、多线程 、 多进程 实际上也取决于具体的场景:
1. 一个连接一个线程模型:适用场景,连接少,且逻辑复杂。例如mysql采用此模型,一个连接一个线程。模型的一些小变体是线程采用线程池,避免创建销毁线程的开销
2. 半同步半异步模型:单独一个IO线程来异步处理网络IO,使用线程池来同步处理请求,业务逻辑的编写就会变得简单。适用于并发连接较多,但是每秒的请求量不太大的业务。可以参考半同步半异步I/O的设计模式(half sync/half async)也可以参考我的handy/hsha.cc at master · yedf/handy · GitHubLeader/Follower模式属于这个模型的变体
3. 全异步模型:网络IO和业务处理都是异步的,一个线程可以处理所有的任务,程序不会阻塞在任何一个网络IO或者磁盘IO上。这种模型能够最大程度利用计算机的性能,但是全异步的处理让业务的编写变得非常复杂。nginx这是这种模型,他是多进程,每个worker都是一样的,没有不同。memcache也是类似的,它的多线程完全是为了利用多个cpu能力,单线程也能够完整的跑整个业务的
登录后可查看更多问答,登录/注册
中间件、负载均衡、应用层安全防护、动静分离、Nginx+LUA开发等
3.2k 10
2.1k 12
1.0k 12
1.8k 11