首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当试图保持线程打开时,为什么"Console.Readline()“占用5%的CPU,而"while (true)”占用30%?

当试图保持线程打开时,"Console.Readline()"占用5%的CPU,而"while (true)"占用30%的原因是因为它们的工作方式不同。

  1. "Console.Readline()"是一个阻塞调用,它会等待用户输入,直到用户按下回车键才会继续执行后面的代码。在等待用户输入的过程中,它会释放CPU资源,因此只占用较少的CPU。这种方式适用于需要等待用户输入的交互式应用程序。
  2. "while (true)"是一个无限循环,它会不断地执行循环体中的代码,不会主动释放CPU资源。因此,它会持续占用较多的CPU。这种方式适用于需要持续执行某些任务的后台应用程序。

总结起来,"Console.Readline()"适用于需要等待用户输入的交互式应用程序,而"while (true)"适用于需要持续执行某些任务的后台应用程序。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云云服务器(CVM):提供弹性计算能力,满足各类业务需求。产品介绍链接
  • 腾讯云函数计算(SCF):无需管理服务器,按需运行代码,实现事件驱动的无服务器架构。产品介绍链接
  • 腾讯云容器服务(TKE):提供高度可扩展的容器化应用管理平台,简化容器部署和管理。产品介绍链接
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • C#中关于Task.Yeild()探究

    Task是否已经完成,如果已经完成,则继续执行下去,不会返回到调用方,原因是尽量避免线程切换,因为await后面部分代码很可能是另一个不同线程执行,Task.Yeild()则可以强制回到调用方,或者说主动让出执行权...Yeild意思在这里其实就是退让,让出意思,让出什么呢?就是让出执行权,这与Thread.sleep(0)让出CPU执行权给其他线程(前提是有其他线程竞争)有机会执行是一个道理。...请看我例子: public static async Task OP1() { while (true) { await Task.Yield();//这里会捕捉同步上下文..."); Thread.Sleep(1000);//模拟一些需要占用CPU操作 } } public static async Task OP2() { while...例如: 1 public static async Task OP2() 2 { 3 while (true) 4 { 5 await Task.CompletedTask

    31520

    自旋锁

    1.概要 自旋锁是一种多线程同步机制,用于保护共享资源免受并发访问影响。自旋锁原理是在多个线程尝试获取锁,它们会一直自旋(即在一个循环中不断检查锁是否可用)不是立即进入休眠状态等待锁释放。...如果标志位为true,表示锁已被某个线程占用;如果标志位为false,表示锁可用。...一个线程尝试获取自旋锁,它会不断地检查标志位,如果标志位为false,则表示锁可用,线程将设置标志位为true,表示自己占用了锁,并进入临界区。...如果一个线程尝试获取锁发现标志位为true(即锁已被其他线程占用),它会在一个循环中不断自旋等待,直到锁被释放。 优点: 低延迟: 自旋锁适用于短时间内锁竞争情况。...缺点: CPU资源浪费: 自旋锁会占用CPU资源,因为等待锁线程会一直自旋,不断地检查锁状态。在锁竞争激烈或锁持有时间较长,可能会浪费大量CPU时间。

    23010

    深入理解MySQL中CPU自旋锁及其调优实践

    线程A也尝试获取这个锁,由于锁已经被占用线程A不会进入休眠,而是在当前位置不断检查锁是否可用,即“自旋”。一旦线程B释放了锁,线程B便能够立即获取到锁并继续执行。...自旋锁(spin lock)是一种非阻塞锁,也就是说,如果某线程需要获取锁,但该锁已经被其他线程占用时,该线程不会被挂起,而是在不断消耗CPU时间,不停试图获取锁。...需要注意是因为线程在等待获取锁过程中会占用CPU资源进行无效工作。如果锁被持有的时间较长,则自旋锁可能会浪费大量CPU资源,导致系统性能下降。...如下代码可以看到MySQL默认作了30次(innodb_sync_spin_loops=30)mutex检查后,才放弃占用CPU资源。...(); // 主动让出当前占用CPU时间片 } ... ulong srv_n_spin_wait_rounds = 30; // 自旋等待循环次数,即尝试获取锁最大自旋次数

    34610

    自旋锁

    自旋锁 自旋锁是指一个线程尝试获取某个锁,如果该锁已被其他线程占用,就一直循环检测锁是否被释放,不是进入线程挂起或睡眠状态。一旦另外一个线程释放该锁后,此线程便能获得该锁。...自旋是一种忙等待状态,过程中会一直消耗CPU时间片。 为什么要用自旋锁 互斥锁有一个很大缺点,即获取锁失败后线程会进入睡眠或阻塞状态,这个过程会涉及到用户态到内核态调度,上下文切换开销比较大。...自旋锁存在问题 1、自旋锁一直占用CPU,在未获得锁情况下,一直运行,如果不能在很短时间内获得锁,会导致CPU效率降低。 2、试图递归地获得自旋锁会引起死锁。...递归程序决不能在持有自旋锁时调用它自己,也决不能在递归调用时试图获得相同自旋锁。 由此可见,我们要慎重使用自旋锁,自旋锁适合于锁使用者保持锁时间比较短并且锁竞争不激烈情况。...正是由于自旋锁使用者一般保持锁时间非常短,因此选择自旋不是睡眠是非常必要,自旋锁效率远高于互斥锁。

    77140

    .NET Core多线程 (1) Thread与Task

    switch context Windows系统中大概30ms进行一次上下文切换,如果上下文切换非常频繁,会造成CPU暴高 在上下文切换中涉及到CPU与thread交互 时间片到了...线程太多,造成上下文切换频繁(CPU暴高) 比如创建了5000个thread,假设都在执行耗时任务,运行主机只有6核12线程,必然会造成频繁上下文切换 GC负担过大,徒增GC负担...Task:基于ThreadPool上层封装 线程使用及分析其设计思想 (1)为什么要使用线程池?...); 第三个参数 bool preferLocal,一般建议传true,代表优先使用线程本地队列(Local Queue) 不是 全局队列(Work Queue),降低锁竞争。...具体实现思路是: (1)每个线程优先从本地队列中取任务干活; (2)如果本地队列中没有任务了,就从全局队列中取任务干活; (3)全局任务队列里面的任务没有的时候,CLR将会把其他有任务线程未处理任务

    48230

    线程编程01

    好处: 可以提高CPU利用率 在多线程程序中,一个线程必须等待时候,CPU可以运行其它线程不是等待,这样就大大提高了程序效率 缺点: 多线程本身可能影响系统性能不利方面 线程也是程序,所以线程需要占用内存...,线程越多占用内存也越多 多线程需要协调和管理,所以需要CPU时间跟踪线程 线程之间对共享资源访问会相互影响,必须解决竞用共享资源问题 线程太多会导致控制太复杂,容易出现造成很多Bug又不容易排除情况...委托异步以多线程区别: 委托启动之后线程不能停止,无法被干涉,线程启动之后线程可被很好控制。...Join(int time) 调用线程等待被调用线程完成所有操作后或者等待时间超过指定时间time以后,当前线程才能继续执行 CPU时间片 什么是CPU时间片 线程靠抢CPU时间片执行,谁抢多谁利用...CPU时间就多也就执行得快 优先级 决定了这个争抢能力 线程优先级高在同一间越能获得CPU时间片 优先级枚举 ØThreadPriority 成员 Normal,默认情况下创建线程优先级 ,原则上相同优先级线程会获得相同

    14910

    Python实战 | 基于 Flask 部署 Keras 深度学习模型

    ,如耗时、CPU 占用率、内存占用以及 GPU 显存占用率等。...耗时 耗时是为了测试图像进行分类特征提取所用时间,包括图像预处理时间和模型预测时间总和。...GPU 显存占用 使用英伟达命令行nvidia-smi可以查看显存占用。 3. CPU, MEM 占用 使用top命令或htop命令查看 CPU 占用率以及内存占用率。...threaded:bool类型,是否开启多线程。注:开启多个进程,不支持同时开启多线程。 函数名称被用于生成相关联 URL。函数最后返回需要在用户浏览器中显示信息。 2....,默认为1 worker_connections = 2000 # 最大客户并发量 timeout = 30 # 超时时间,默认30s reload = True # 开发模式,代码更新自动重启 daemon

    2.6K10

    C#多线程之旅(1)——介绍和基本概念

    这个地方问题是线程A在线程B设置done等于true之前进入if条件判断中,所有A有机会打印出"Done"。 改进方式读\写一个公共字段,获取一个独占锁(exclusive lock)。...一个线程阻塞时候,不占用CPU资源。 二、Join 和Sleep 1.Join 通过调用一个线程Join方法,可以等待另外一个线程结束。...//sleep 500 微秒 使用Sleep或Join暂停线程,这个线程是阻塞,不消耗CPU资源。...使其他阻塞CPU线程得到最有效使用 一个线程正等待另外一计算机或硬件响应时是非常有用一个线程执行任务阻塞了,其他线程正好可以使用计算机。...这个Framework它自己提供了许多高级线程构造函数,我们后面再介绍。 线程在调度和切换线程时会造成资源和CPU消耗(激活线程数量多余CPU数量)-而且有创建/销毁损耗。

    94591

    金九银十准备季——Java后端多线程&并发面试题及答案(二)

    exit){ //do something } } } 定义了一个退出标志 exit, exit 为 true while 循环退出, exit 默认值为 false.在定义 exit,使用了一个...调用线程interrupt()方法,会抛出 InterruptException 异常。...2.线程未处于阻塞状态:使用 isInterrupted()判断线程中断标志来退出循环。使用interrupt()方法,中断标志就会置 true,和使用自定义标志来控制循环是一样道理。...如果自旋执行时间太长,会有大量线程处于自旋状态占用 CPU 资源,进而会影响整体系统性能。因此自旋周期选额外重要!...当前线程是否保持锁锁定,线程执行 lock 方法前后分别是 false 和 true isLock():此锁是否有任意线程占用 lockInterruptibly() :如果当前线程未被中断,获取锁

    49310

    Android Application Thread CPU GC Operatiing and OOM Question 0603-随手笔记

    大家好,又见面了,我是全栈君 面前app完成测试,没问题,以完成整个老龄化阶段包含数据收发器,关键在 adb shell top -m 5 我发现我 app pid 占用 CPU是最多,事实上我想说写一个...为什么CPU 占用会那么高?是不是在主线程或者子线程做了耗时操作。网络操作,new 实例对象过多? 带着这个疑问。...有数据传过来,isPause 会被设成true,代码流程就会走到if里面,一旦发完一条数据报。 isPause false while 就用进入了空死循环。不干不论什么事情,且频率非常快循环运行。...占用情况: 能够看到com.digissin.twelveCPU占用大幅减少了。...,我们能够直接 * 调用Handler对象obtainMessage()函数,这个函数Handler被创建

    18920

    高频多线程&并发面试题(附答案,纯干货)(二)

    如果要挂起或者唤醒一个线程,都需要操作系统帮忙完成,操作系统实现线程之间切换需要从用户态转换到内核态,这个状态之间转换需要相对比较长时间,时间成本相对较高,这也是为什么早期synchronized...方法占用锁是当前类锁,访问非静态synchronized 方法占用锁是当前实例对象锁。...30、阻塞状态(BLOCKED) 阻塞状态是指线程因为某种原因放弃了 cpu 使用权,也即让出了 cpu timeslice,暂时停止运行。..., exit 为 true while 循环退出, exit 默认值为 false.在定义 exit,使用了一个 Java 关键字 volatile,这个关键字目的是使 exit 同步,也就是说在同一刻只能由一个线程来修改...当前线程是否保持锁锁定,线程执行 lock 方法前后分别是 false 和 true isLock():此锁是否有任意线程占用 lockInterruptibly() :如果当前线程未被中断,获取锁

    43520

    写给小白看线程池,还有10道面试题

    maximumPoolSize 最大线程数,线程不够能够创建最大线程数。...面试题5:线程池中核心线程数量大小怎么设置? 「CPU密集型任务」:比如像加解密,压缩、计算等一系列需要大量耗费 CPU 资源任务,大部分场景下都是纯 CPU 计算。...面试题7:线程为什么需要使用(阻塞)队列? 主要有三点: 因为线程若是无限制创建,可能会导致内存占用过多产生OOM,并且会造成cpu过度切换。 创建线程消耗较高。...面试题8:线程为什么要使用阻塞队列不使用非阻塞队列? 阻塞队列可以保证任务队列中没有任务阻塞获取任务线程,使得线程进入wait状态,释放cpu资源。...队列中有任务才唤醒对应线程从队列中取出消息进行执行。 使得在线程不至于一直占用cpu资源。 (线程执行完任务后通过循环再次从任务队列中取出任务进行执行,代码片段如下 while (task !

    36120

    刨根问底---一次 OOM 试验造成电脑雪崩引发思考

    在以上对问题描述中至少有三个问题值得我们去思考 以上 while (true) 为啥会造成 cpu 负载 800% 在主线程发生 OOM 后我在终端用 Ctrl + C 试图终止 Java 进程执行...,但没成功,为啥中止信号不生效呢 主线程发生 OOM 后 Java 进程为啥不会停止运行 一个个来看 while (true) 与 cpu 负载关系 首先我们要明白 %CPU 代表含义,它指的是进程占用一个核百分比...,如果进程启动了多个线程,多线程就会占用多个核,是可能超过 100% ,但最多不超过 CPU核数 * 100%, 怎么查看逻辑 CPU 个数 Linux 下可以用 cat /proc/cpuinfo...while(true) 线程优先级,提升它 CPU 占用时间片,也就是说 while(true) 这个死循环用光了别的进程省下时间,不让 CPU 有片刻休息时间,导致 CPU 负载过高,这就像马太效应...简单地说就是 JVM 中信号处理器确实收到了终端发出 Ctrl + C 终止信号,但它调用 Java 进程想中止发生了 OOM 导致中断失败, 那为啥调用会发生 OOM 呢,我猜是因为信号处理器要启动一个线程来做这种终止通知操作

    51810

    【Java】一次 OOM 试验造成电脑雪崩引发思考

    在以上对问题描述中至少有三个问题值得我们去思考 以上 while (true) 为啥会造成 cpu 负载 800% 在主线程发生 OOM 后我在终端用 Ctrl + C 试图终止 Java 进程执行...,但没成功,为啥中止信号不生效呢 主线程发生 OOM 后 Java 进程为啥不会停止运行 一个个来看 while (true) 与 cpu 负载关系 首先我们要明白 %CPU 代表含义,它指的是进程占用一个核百分比...,如果进程启动了多个线程,多线程就会占用多个核,是可能超过 100% ,但最多不超过 CPU核数 * 100%, 怎么查看逻辑 CPU 个数 Linux 下可以用 cat /proc/cpuinfo...while(true) 线程优先级,提升它 CPU 占用时间片,也就是说 while(true) 这个死循环用光了别的进程省下时间,不让 CPU 有片刻休息时间,导致 CPU 负载过高,这就像马太效应...简单地说就是 JVM 中信号处理器确实收到了终端发出 Ctrl + C 终止信号,但它调用 Java 进程想中止发生了 OOM 导致中断失败, 那为啥调用会发生 OOM 呢,我猜是因为信号处理器要启动一个线程来做这种终止通知操作

    53030

    手把手教你定位常见Java性能问题

    死锁 死锁会导致耗尽线程资源,占用内存,表现就是内存占用升高,CPU不一定会飙升(看场景决定),如果是直接new线程,会导致JVM内存被耗尽,报无法创建线程错误,这也是体现了使用线程好处。...结合这些信息我们可以断定Java线程开启过多,导致频繁上下文切换,从而影响了整体性能。 为什么系统上下文切换是每秒800多万, Java 进程中某一个线程切换才15次左右?...某个进程时间片耗尽了就会被系统挂起,切换到其它等待 CPU 进程运行。 进程在系统资源不足,要等待资源满足后才可以运行,这时进程也会被挂起,并由系统调度其它进程运行。...进程通过睡眠函数 sleep 主动挂起,也会重新调度。 有优先级更高进程运行时,为了保证高优先级进程运行,当前进程会被挂起,由高优先级进程来运行。...Java内部线程切换才15次,是因为线程使用Thread.yield()来让出CPU资源,但是CPU有可能继续调度该线程,这个时候线程之间并没有切换,这也是为什么内部某个线程切换次数并不是非常大原因

    1.2K10

    操作系统进程同步与信号量---08

    为什么依次唤醒阻塞队列中所有进程呢? 被唤醒后需要干啥? 为什么被唤醒后,还需要进入while循环判断呢?...一个进程正在修改信号量,由于时间片耗完,引发调度,该修改信号量进程被切换出去,得到CPU使用权新进程也开始修改此信号量,那么该信号量值就很有可能发生错误,如果信号量值出错了,那么进程同步也会出错...我们先来看最简单CPU情况,对于单CPU,一次只能执行一个线程,单条指令执行天然就是原子。因为同一刻只会有一个线程在执行,不会存在抢占情况。...意思是在多线程场景当中,一个线程无法获取到临界区资源时候,不是挂起等待,而是会一直保持执行,反复查询锁变量是否可用。也就是说是一种忙等待。...,如果被其他进程占用了,那么当前进程就需要进入睡眠状态,当前磁盘占用结束,对应进程还需要通过中断还唤醒等待磁盘读写进程。

    84030
    领券