为什么IO操作不占用CPU却会导致进程阻塞?Web服务器每接收一个请求都会创建一个新的线程吗?这两个问题在我学操作系统以前我都挺困惑的。现在我来尝试着解答一下。

1. 为什么IO操作不占用CPU却会导致进程阻塞?

IO操作是要等磁盘里面的数据读出来进入CPU处理,读数据的时候不归CPU管。但是因为进程需要这个IO的数据,所以需要等待IO结束了才能继续运行(进程阻塞)。


2. Web服务器每接收一个请求都会创建一个新的线程吗?

web服务器接收并且处理客户端发来的请求,请求的资源可以是文本、图像、音频等等。web服务器有不同的处理逻辑,但是最高校的是采用多线程+线程池的方式。下面就来聊聊Web服务器的几种工作类型:

  1. 单线程处理方式:用户发来的请求依次处理,面对大量请求时,响应速度慢,效率极为低下。
  2. 单进程处理方式:让服务器作为单进程来接收请求,当服务器收到新请求时创建另外一个进程去处理请求,但这样新创建的进程会消耗与原进程一样多的资源和时间。
  3. 多线程处理方式:每次收到一个请求,Web服务器都会创建一个新的线程去处理请求。创建线程基本不需要新的资源,创建的速度也比进程快,因此多线程的Web服务器比较高校。

4. 线程池技术

对于Web服务器来说,每次收到用户的请求时,就会创建一个新的线程去处理请求。这里有一个潜在的问题:如果请求过多,将无法限制操作系统中并发执行的线程数量,无限制的线程会耗尽系统资源,例如内存和CPU。解决这个问题的方法就是使用线程池技术(Thread Pool)。

线程池的基本思想是在进程开始时创建一定数量的线程,并放入池中等待。当服务器收到一个请求时,它会唤醒池中的一个线程,并将要处理的请求传递给它。一旦线程完成了服务,他会返回池中等待被唤醒。如果请求过多,导致池中没有可用的线程,那么服务器会等到一直有空闲的线程为止。

线程池技术的优点:

  1. 用现有的线程处理请求比创建新的线程更快。
  2. 线程池限制了可用线程的数量,对那些不能支持大量并发线程的系统帮助较大。

3. Tomcat服务器工作原理

tomcat在用户每次请求一个web资源的时候,servlet或者是jsp页面,tomcat都会创建一个新的线程或者使用线程池中已有空闲的线程,在该线程中调用service方法或者doGet,doPost方法。

一个请求过来,如果线程池里面有空闲的线程,那么会在线程池里面取一个线程来处理该请求,一旦该线程当前在处理请求,其他请求就不会被分配到该线程上,直到该请求处理完成。请求处理完成后,会将该线程重新加入线程池。



操作系统:为什么IO操作不占用CPU却会导致进程阻塞?Web服务器每接收一个请求都会创建一个新的线程吗?Tomcat服务器工作原理?相关推荐

  1. Linux的进程kswapd0占用CPU过高导致卡顿问题

    问题描述 最近发现服务器访问速度变慢,内存占得很满,操作经常卡顿,因为部署了不少的服务,有应用服务,也有数据库服务都很吃内存,但是查看还剩余2G左右内存,应该不至于卡顿,于是准备处理一下. 看了系统经 ...

  2. Echarts 占用CPU高,导致浏览器卡顿问题。

    页面中使用了大量的Echarts 图例,当操作页面时间久了后发现浏览器占用电脑CPU达到了30%,而电脑的配置是服务器级别的配置,这让人觉得奇怪. 使用chrome的profile调试工具记录了js脚 ...

  3. I/O操作不占用CPU的任何线程

    原文链接:http://blog.stephencleary.com/2013/11/there-is-no-thread.html

  4. Unity-- Gfx.WaitForPresentOnGfxThread占用CPU过高导致帧率低

    一个新建的URP项目,里面只有几个测试模型,结果在3070的笔记本电脑上,只能运行到20帧!FPS=20! 这实在受不了,开始Profiler分析原因.发现Gfx.WaitForPresentOnGf ...

  5. python之协程与IO操作

    协程 协程,又称微线程,纤程.英文名Coroutine. 协程的概念很早就提出来了,但直到最近几年才在某些语言(如Lua)中得到广泛应用. 子程序,或者称为函数,在所有语言中都是层级调用,比如A调用B ...

  6. 阿里云kubernetes遭入侵pubg进程占用cpu资源100%解决方法

    发现服务器CPU占用100%,通过top命令发现pubg -c config.json -t 2占用CPU资源,kill进程会自动启动.黑客入侵方式是kubernetes创建pod. Name: ku ...

  7. 不同存储结构的文件磁盘io操作次数_MySQL InnoDB存储引擎

    第1章 MySQL体系结构和存储引擎 1.1数据库和实例 数据库:物理操作系统文件或其他形式文件类型的集合.实例:MySQL数据库由后台线程以及一个共享内存区组成.共享内存可以被运行 的后台线程所共享 ...

  8. IO操作和DMA、RDMA

    用户进程想要执行IO操作时(例如想要读磁盘数据.向磁盘写数据.读键盘的输入等等),由于用户进程工作在用户模式下,它没有执行这些操作的权限,只能通过发起对应的系统调用请求操作系统帮忙完成这些操作.这里因 ...

  9. java.exe占用cpu高_Java进程cpu占用过高问题解决

    cpu是时分(time division)的,操作系统里有很多线程,每个线程的运行时间由cpu决定,cpu会分给每个线程一个时间片,时间片是一个很短的时间长度,如果在时间片内,线程一直占有,则是100 ...

最新文章

  1. 733.图像渲染(主讲题意)
  2. 排除万难,我终于入了程序员的坑!
  3. oracle data guard闪回,11gR2 Active Data Guard 闪回 - flashback database / snapshot standby - 2
  4. Java常用设计模式————工厂模式
  5. 云服务器怎么安装声音驱动_Windows服务器怎么装虚拟声卡驱动呢
  6. 火箭技术术语_仿真优化火箭发动机 3D 打印制造工艺
  7. oracle一些基本命令
  8. 程序员里面开源_开源对年轻程序员意味着什么
  9. 【环球产品探寻 4】Wolftech News拥有一流用户体验的媒体工作流系统 - 挪威
  10. 【FFmpeg系列】使用FFmpeg实现视频图像旋转、翻转或转置
  11. [OpenJudge] 2.5基本算法之搜索 红与黑
  12. Matlab 指定分辨率保存图片
  13. 一级计算机字处理知识点,全国计算机等级考试一级word文字处理题考点
  14. pygame 等有缘人接盘
  15. 让我摘下星星送给你_想摘下星星给你,就摘下月亮给你。什么歌?
  16. 微信小程序引入iconfont单色图标实例(Font class方式)
  17. 维克森林大学计算机科学专业好不好,美国维克森林大学计算机科学硕士专业介绍...
  18. 队名 Booqmz 具体读音可以详见谷歌翻译声优~
  19. 你不知道的font-size属性
  20. 随机发牌_Java项目实战:斗地主洗牌发牌小游戏

热门文章

  1. Repeatable 注解无效的问题
  2. 两个参数不同的接收方法的方法
  3. #午安,努力#11.30
  4. 1像素下边框引发移动端设备像素比的应用
  5. 爱茉莉太平洋旗下品牌芙莉美娜正式进入中国市场
  6. Java集合详解--什么是集合
  7. 座椅内饰如何「跟上」智能电动?这款智能概念座舱看到未来
  8. Now直播iOS Flutter混合工程实践
  9. 新手引导:教你如何解析域名?
  10. 一、爬虫原理与工具使用