For investors
股价:
5.36 美元 %For investors
股价:
5.36 美元 %认真做教育 专心促就业
随着互联网的不断发展,越来越多的软件编程开发公司都开始注重软件测试行业的发展,许多企业也设计了独立的软件测试岗位,下面我们就通过案例分析来简单了解一下,零基础学习软件测试需要掌握哪些能力。
高效Socket读取
Socket的读取和写入默认都是同步的过程,对用户线程来说就是阻塞的。发送数据的情况还好,不会等待多久;读取数据就比较尴尬,因为我们不知道对方什么时候会发送数据,也就不知道要等多久;对一个高性能的Web或者应用服务器来说,解决这个问题就是重要的。下面我们看看对这块的解决方案是怎么演化的。
同步阻塞模型
简单的方式就是同步阻塞式读取。对应到服务器设计上,每来一个网络请求,我们就生成一个线程来服务。没有请求数据的时候,这个线程就阻塞着。这就是同步阻塞模型。
同步阻塞模型大的问题就是,没有数据的时候也要无谓的等待。这种设计的确会浪费线程和Socket资源,但是这种模型足够简单,开发容易。如果并发量并不大的情况,可以考虑采用。
同步非阻塞模型
我们改进一下,在读取数据之前,先检测一下,如果这时没有数据,就先去干点别的。这就是同步非阻塞模型。
采用这个模型,只需要Socket读取数据的时候设置成非阻塞就可以。但是这种模型缺点也很大,每个用户线程总要轮询去检测,如果一直没有数据,就白白浪费了计算资源。
多路复用模型
再优化一下,如果我们只用一个线程去做所有Socket的检测工作,当真正有数据到达的时候,再提醒用户线程去处理。这样就很好的解决了同步非阻塞模型的缺点。这就是多路复用模型。Linux的epoll就是这样的方式。
这里我们要考虑一点,多路复用模型只有一个线程做检测工作,增加了服务器处理请求的能力,但是如果并发量并不大的时候,其实性能并没有提高。
异步模型
前面所说的各种模型,都需要我们自己做大量的工作。有没有一种方式,让操作系统把全部工作承包了呢。当然是有的。操作系统来监听Socket,当有数据到来时,读取这个数据,拷贝数据到用户态进程空间,完成这一切工作后,再来告知我们。这就是异步模型,Windows操作系统的完成端口模式就是这样的方式。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。