操作系统:为什么IO操作不占用CPU却会导致进程阻塞?Web服务器每接收一个请求都会创建一个新的线程吗?Tomcat服务器工作原理?
为什么IO操作不占用CPU却会导致进程阻塞?Web服务器每接收一个请求都会创建一个新的线程吗?这两个问题在我学操作系统以前我都挺困惑的。现在我来尝试着解答一下。
1. 为什么IO操作不占用CPU却会导致进程阻塞?
IO操作是要等磁盘里面的数据读出来进入CPU处理,读数据的时候不归CPU管。但是因为进程需要这个IO的数据,所以需要等待IO结束了才能继续运行(进程阻塞)。
2. Web服务器每接收一个请求都会创建一个新的线程吗?
web服务器接收并且处理客户端发来的请求,请求的资源可以是文本、图像、音频等等。web服务器有不同的处理逻辑,但是最高校的是采用多线程+线程池的方式。下面就来聊聊Web服务器的几种工作类型:
- 单线程处理方式:用户发来的请求依次处理,面对大量请求时,响应速度慢,效率极为低下。
- 单进程处理方式:让服务器作为单进程来接收请求,当服务器收到新请求时创建另外一个进程去处理请求,但这样新创建的进程会消耗与原进程一样多的资源和时间。
- 多线程处理方式:每次收到一个请求,Web服务器都会创建一个新的线程去处理请求。创建线程基本不需要新的资源,创建的速度也比进程快,因此多线程的Web服务器比较高校。
4. 线程池技术
对于Web服务器来说,每次收到用户的请求时,就会创建一个新的线程去处理请求。这里有一个潜在的问题:如果请求过多,将无法限制操作系统中并发执行的线程数量,无限制的线程会耗尽系统资源,例如内存和CPU。解决这个问题的方法就是使用线程池技术(Thread Pool)。
线程池的基本思想是在进程开始时创建一定数量的线程,并放入池中等待。当服务器收到一个请求时,它会唤醒池中的一个线程,并将要处理的请求传递给它。一旦线程完成了服务,他会返回池中等待被唤醒。如果请求过多,导致池中没有可用的线程,那么服务器会等到一直有空闲的线程为止。
线程池技术的优点:
- 用现有的线程处理请求比创建新的线程更快。
- 线程池限制了可用线程的数量,对那些不能支持大量并发线程的系统帮助较大。
3. Tomcat服务器工作原理
tomcat在用户每次请求一个web资源的时候,servlet或者是jsp页面,tomcat都会创建一个新的线程或者使用线程池中已有空闲的线程,在该线程中调用service方法或者doGet,doPost方法。
一个请求过来,如果线程池里面有空闲的线程,那么会在线程池里面取一个线程来处理该请求,一旦该线程当前在处理请求,其他请求就不会被分配到该线程上,直到该请求处理完成。请求处理完成后,会将该线程重新加入线程池。
操作系统:为什么IO操作不占用CPU却会导致进程阻塞?Web服务器每接收一个请求都会创建一个新的线程吗?Tomcat服务器工作原理?相关推荐
- Linux的进程kswapd0占用CPU过高导致卡顿问题
问题描述 最近发现服务器访问速度变慢,内存占得很满,操作经常卡顿,因为部署了不少的服务,有应用服务,也有数据库服务都很吃内存,但是查看还剩余2G左右内存,应该不至于卡顿,于是准备处理一下. 看了系统经 ...
- Echarts 占用CPU高,导致浏览器卡顿问题。
页面中使用了大量的Echarts 图例,当操作页面时间久了后发现浏览器占用电脑CPU达到了30%,而电脑的配置是服务器级别的配置,这让人觉得奇怪. 使用chrome的profile调试工具记录了js脚 ...
- I/O操作不占用CPU的任何线程
原文链接:http://blog.stephencleary.com/2013/11/there-is-no-thread.html
- Unity-- Gfx.WaitForPresentOnGfxThread占用CPU过高导致帧率低
一个新建的URP项目,里面只有几个测试模型,结果在3070的笔记本电脑上,只能运行到20帧!FPS=20! 这实在受不了,开始Profiler分析原因.发现Gfx.WaitForPresentOnGf ...
- python之协程与IO操作
协程 协程,又称微线程,纤程.英文名Coroutine. 协程的概念很早就提出来了,但直到最近几年才在某些语言(如Lua)中得到广泛应用. 子程序,或者称为函数,在所有语言中都是层级调用,比如A调用B ...
- 阿里云kubernetes遭入侵pubg进程占用cpu资源100%解决方法
发现服务器CPU占用100%,通过top命令发现pubg -c config.json -t 2占用CPU资源,kill进程会自动启动.黑客入侵方式是kubernetes创建pod. Name: ku ...
- 不同存储结构的文件磁盘io操作次数_MySQL InnoDB存储引擎
第1章 MySQL体系结构和存储引擎 1.1数据库和实例 数据库:物理操作系统文件或其他形式文件类型的集合.实例:MySQL数据库由后台线程以及一个共享内存区组成.共享内存可以被运行 的后台线程所共享 ...
- IO操作和DMA、RDMA
用户进程想要执行IO操作时(例如想要读磁盘数据.向磁盘写数据.读键盘的输入等等),由于用户进程工作在用户模式下,它没有执行这些操作的权限,只能通过发起对应的系统调用请求操作系统帮忙完成这些操作.这里因 ...
- java.exe占用cpu高_Java进程cpu占用过高问题解决
cpu是时分(time division)的,操作系统里有很多线程,每个线程的运行时间由cpu决定,cpu会分给每个线程一个时间片,时间片是一个很短的时间长度,如果在时间片内,线程一直占有,则是100 ...
最新文章
- 733.图像渲染(主讲题意)
- 排除万难,我终于入了程序员的坑!
- oracle data guard闪回,11gR2 Active Data Guard 闪回 - flashback database / snapshot standby - 2
- Java常用设计模式————工厂模式
- 云服务器怎么安装声音驱动_Windows服务器怎么装虚拟声卡驱动呢
- 火箭技术术语_仿真优化火箭发动机 3D 打印制造工艺
- oracle一些基本命令
- 程序员里面开源_开源对年轻程序员意味着什么
- 【环球产品探寻 4】Wolftech News拥有一流用户体验的媒体工作流系统 - 挪威
- 【FFmpeg系列】使用FFmpeg实现视频图像旋转、翻转或转置
- [OpenJudge] 2.5基本算法之搜索 红与黑
- Matlab 指定分辨率保存图片
- 一级计算机字处理知识点,全国计算机等级考试一级word文字处理题考点
- pygame 等有缘人接盘
- 让我摘下星星送给你_想摘下星星给你,就摘下月亮给你。什么歌?
- 微信小程序引入iconfont单色图标实例(Font class方式)
- 维克森林大学计算机科学专业好不好,美国维克森林大学计算机科学硕士专业介绍...
- 队名 Booqmz 具体读音可以详见谷歌翻译声优~
- 你不知道的font-size属性
- 随机发牌_Java项目实战:斗地主洗牌发牌小游戏