NIO处理网络通信的过程简介

2019-04-21  本文已影响0人  屎倒淋头还嚼便

大概描述,不一定准确

出自:https://www.jianshu.com/p/a4e03835921a

NIO模型中通常会有两个线程,每个线程绑定一个轮询器selector,在我们这个例子中serverSelector负责轮询是否有新的连接,clientSelector负责轮询连接是否有数据可读

一旦查看到有新的连接,就把它(应该是连接信息,大概包括连接者的ip、端口,和消息等等)交给clientSelector,由其处理数据(会把接收到的数据放到一个缓存区中)

疑问:

1、aio会为每一个连接创建一个线程来处理数据,线程过多的话,会增加过多开销。那么该线程等待接收数据时,也是轮询端口是否接收到数据了吗?端口接收到数据后,不是应该给cpu发中断消息,然后让其来处理吗?

可以先找一个aio网络通信的例子看看,再百度下aio原理

2、NIO发现连接,必须使用轮询吗?有新连接建立后,那个端口不会发送中断通知cpu吗?

轮询有间隔吗?没有间隔会产生空转造成cpu100%吗?有间隔的话,线程按毫秒频繁切换,会增加多大的开销

上一篇下一篇

猜你喜欢

热点阅读