初创公司需要注意这个关键问题
当用户进程调用了recv()/recvfrom()这个系统调用,kernel就开始了IO的第一个阶段:准备数据(对于网络IO来说,很多时候数据在一开始还没有到达。比如,还没有收到一个完整的UDP包。这个时候kernel就要等待足够的数据到来)。这个过程需要等待,也就是说数据被拷贝到操作系统内核的缓冲区中是需要一个过程的。而在用户进程这边,整个进程会被阻塞(当然,是进程自己选择的阻塞)。 第二个阶段:当kernel一直等到数据准备好了,它就会将数据从kernel中拷贝到用户内存,然后kernel返回结果,用户进程才解除block的状态,重新运行起来。 所以,blocking IO的特点就是在IO执行的两个阶段都被block了。 优点: 1. 能够及时返回数据,无延迟; 2. 对内核开发者来说这是省事了; 缺点: 对用户来说处于等待就要付出性能的代价了; 非阻塞IO
指调用者在调用某一个函数后,不等待该函数的返回值,线程继续运行其他程序(执行其他操作或者一直遍历该函数是否返回了值)。好比你要喝水,水还没烧开,你就隔段时间去看一下饮水机,直到水烧开为止。(复制数据时阻塞) 网络IO的本质是socket的读取,socket在linux系统被抽象为流,IO可以理解为对流的操作。对于一次IO访问(以read举例),数据会先被拷贝到操作系统内核的缓冲区中,然后才会从操作系统内核的缓冲区拷贝到应用程序的地址空间。 所以说,当一个recv操作发生时,它会经历两个阶段:
对于socket流而言:
阻塞IO(Blocking IO)
指调用者在调用某一个函数后,一直在等待该函数的返回值,线程处于挂起状态。好比你去商场试衣间,里面有人,那你就一直在门外等着。(全程阻塞) 为让用户能够在无线网络中漫游一从 一个AP漫游到另一个AP,且不会中断网络连接,相邻AP的蜂窝必须至少重叠10%~ 20%。为此,必须让每个AP使用不同的频道(频率)。 6. 在WLAN中支持IP语音(VoIP) VoIP在当今世界中不可或缺,其应用范围在不断扩大,因此了解VoIP对有线和无线网络的影响至关重要。 有关其配置和详情不在CCENT和CCNA考试范围内,因此这里只讨论需要牢记的需求。 必须明白VoIP电话对网络的要求:
LAN和WLAN包含很多设备,但不要忘记VoIP设备。设计WLAN时,网络管理员必须考虑VoIP的独特要求,如带宽、优先级、延迟、为VoIP配置独立的VLAN并实现QoS以及供电方面的要求。 (编辑:新余站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |