部分片段:
早期web服务器由于Http链接短暂而有所掩盖,由于web页面和嵌入式的图片一般很小(至少与通常通过FTP获取软件包要小很多),由于web浏览器在获取各个文件后挂起连接,而不是一次保持数分钟或者几小时的连姐姐,所以web用户不会像FTP用户那样对服务器施加太多的负担,不过,随着使用量的增长,web服务器性能下降,(解决这种问题至少有两种解决方案)
第一种:重用进程,而不是创建新的进程,服务器启动,就创建固定的数量的进程(比如300个)来处理请求,入栈请求放入一个队列中,每个进程从队列中删除一个请求,为这个请求服务。这样的好处避免建立和销毁进程的所有的开销。
第二种:使用轻量级的线程来处理链接,虽然每个单独的进程都有自己的一块的内存,但是在线程在资源的使用上更加的轻松,因为他们会共享内存。利用线程池加大请求处理;
(线程的替代方法)当我们的一个应用同事需要数千个持续很长时间的链接,就要考虑异步I/O而不是线程,选择权支持一个线程查询一组socket,找出那些sockety已经准备就绪可以读写数据,这种情况基于通道和缓冲器来设计I/O而不是流。但是分解又会给相应的设计的问题,特备是在一致性方面。增加了程序的复杂性,不同的线程必须非常注意当时使用的资源。一般来讲,每个线程只有在确保资源不会改变或者他有独占访问权才可以使用某个资源,不过两个线程太多小心,每个线程都等待对资源独占访问权,却永远得不到,这会导致死锁。
时间: 2024-10-21 17:10:20