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

怎么能"while(i == i);" 在单线程应用程序中是一个非无限循环?

在单线程应用程序中,while(i == i); 是一个非无限循环,因为它的条件始终为真。在这个循环中,i 的值始终等于它自己,因此 i == i 的结果始终为真。

在单线程应用程序中,这个循环将一直执行下去,直到程序被手动停止或出现错误。这是因为在单线程环境中,程序只有一个执行路径,因此它不能同时执行其他任务,例如响应用户输入或处理其他事件。

如果您希望建立一个非无限循环,您可以使用一个计数器或其他条件来控制循环的执行次数。例如,您可以使用以下代码:

代码语言:c++
复制
int i = 0;
while(i < 10) {
    // do something
    i++;
}

这个循环将执行10次,然后结束。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Node.js简介

简介 Node.js 一个基于 Chrome V8 引擎的 JavaScript 运行环境。 Node.js 使用了一个事件驱动、阻塞式 I/O 的模型,使其轻量又高效。...所以,如果同步的等待磁盘I/O操作对CPU资源将是极大的浪费。所以Node.js提出了阻塞异步I/O的想法。 对于I/O密集型业务而非计算密集型业务而言,I/O才是应用程序的瓶颈。...Node.js的I/O 处理完之后会有一个回调事件,这个事件会放在一个事件处理队列里(之所以是队列自不必说),进程启动时node会创建一个类似于While(true)的循环,它的每一次轮询都会去执行栈查看是否有事件需要处理...事件驱动一个典型的生产者/消费者模型,请求到达观察者那里,事件循环从观察者进行消费,主线程就可以马不停蹄的只关注业务不用再去进行I/O等待。...主要包括以下几个特点: 1.单线程 2.阻塞异步I/O 3.事件驱动 正是因为Node.js所谓的“单线程” + “异步I/O” + “事件驱动”,所以Node.js仅适用于I/O密集型的业务而非

7.5K30

Node理论笔记:异步IO

2.1 异步I/O与阻塞I/O 从计算机内核I/O而言,异步/同步和阻塞/阻塞实际上两回事。 操作系统对于I/O只有两种:阻塞和阻塞。 调用阻塞I/O时,应用程序需要等待I/O完成才返回。...完美的异步I/O应该是应用程序发起阻塞调用,无需通过遍历或事件唤醒等方式轮询,可以直接处理下一个任务,只需要在I/O完成后通过信号或回调函数将数据传递给应用程序即可。...一个很重要的点,经常提到node单线程的,这里的单线程仅仅是JavaScript执行在单线程而已,node,无论*nix还是windows,内部完成I/O任务的另有线程池。...node,事件来源于网络请求、文件I/O等,对应的观察者有文件I/O观察者、网络I/O观察者等。观察者将事件进行了分类。 事件循环一个典型的生产者/消费者模型。...事件循环、观察者、请求对象、I/O线程池这四者共同构成了node异步I/O模型的基本要素。 node,除了JavaScript单线程外,node自身多线程的,只是I/O线程使用的CPU较少。

74520
  • 《深入浅出Node.js》-异步IO

    第三章 异步 I/O 异步的概念首先在 Web2.0 中火起来,是因为浏览器 JavaScript 单线程上执行,而且它还与 UI 渲染共用一个线程。...调用阻塞 I/O 时,应用程序需要等待 I/O 完成才返回结果。阻塞 I/O 造成 CPU 等待 I/O,CPU 的处理能力得不到充分利用。为了提高性能,内核提供了阻塞 I/O。...阻塞 I/O 调用之后立马返回,但是数据并不在返回结果,返回结果只有当前调用的状态。为了获取完整的数据,应用程序需要重复调用 I/O 操作来确认是否完成。这种方式叫做轮询。...进程启动时,Node 便会创建一个类似于 while(true) 的循环,每执行一次循环体成为 Tick。每个 Tick 的过程就是查看是否有事件待处理,如果有,就取出事件及其相关的回调函数。...Node 每个事件循环中都有一个或多个观察者,而判断是否有事件需要处理的过程就是向这些观察者询问是否有要处理的事件。 Node ,事件主要来源于网络请求,文件 I/O 等。

    73030

    面试官:Java Nio的优缺点?可能的瓶颈有哪些?

    我们以一个NIO的服务器端和客户端聊天室为例来讲解NIOJDK怎么使用的。...,但是对于Selector来说,它的select方法阻塞方法, 只有找到匹配的channel之后才会返回,为了多次进行select操作,我们需要在一个while循环里面进行selector的select...虽然以上NIO的server和client的基本使用,但是基本上涵盖了NIO的所有要点 优缺点及瓶颈 优点 阻塞:Java NIO使用了阻塞I/O模型,允许应用程序进行I/O操作时不必等待,可以继续处理其他任务...,因此1个线程就行就能处理所有连接,这个线程不停循环遍历处理channel,可以通过一个线程同时监视多个通道的状态,从而实现单线程处理多个I/O操作。...性能方面:单线程不停循环发起系统调用,一样会耗尽 CPU 资源。 NIO 可能的瓶颈 使用内存占用:使用直接内存缓冲区可能导致较高的内存消耗,特别是处理大量数据时,对于内存的管控需要更加严格。

    60120

    很多工作10年都讲不清楚,Redis为什么这么快,5k字长文给你讲透!

    多线程似乎一个牢不可破的解决方案:简单且容易理解。因此,最终,antirez选择引入多线程来执行这类阻塞命令。antirez在他的博客更多地思考了这个问题:懒惰的Redis更好的Redis。...因此,Redis v4.0之后,已添加了一些阻塞命令,如UNLINK、FLUSHALL ASYNC、FLUSHDB ASYNC等,它们会在后台线程执行,不会阻塞主线程事件循环。...在前面的部分,我们了解了Redis 6.0之前的单线程事件循环模型,实际上一个非常经典的反应器模型。...反应器模式实际上指使用I/O多路复用(I/O multiplexing)+阻塞I/O(non-blocking I/O)模式。...大部分逻辑与之前的单线程模型相同,唯一的改变将读取客户端请求和写回响应数据的逻辑异步化到I/O线程

    40510

    深入浅出 Nodejs(四):Nodejs 异步 IO 机制

    阻塞I/O的一个特点调用之后一定要等到系统内核层面完成I/O操作,调用才结束。以读取磁盘上的一个文件为例,系统内核完成磁盘寻道、读取数据、复制数据到内存之后,这个调用才结束。...我们期望的完美的异步I/O应该是应用程序发起阻塞调用,无须通过遍历或者事件唤醒等方式轮询,可以直接处理下一任务,只需I/O完成后通过信号或回调将数据传递给应用程序即可。...另一个需要强调的地方在于我们时常提到单线程的,这里的单线程仅仅只是JavaScript执行在单线程罢了。Node,无论*nix还是windows平台,内部完成I/O任务的另有线程池。...进程启动时,Node便会创建一个类似于while(true)的循环,每执行一次循环体的过程我们成为Tick。每个Tick的过程就是查看是否有事件待处理,如果有,就取出事件以及相关的回调函数。...Node,事件主要来源于网络请求、文件I/O等,这些事件对应观察者有文件I/O观察者、网络I/O观察者等。观察者将事件进行了分类。 事件循环一个典型的生产者/消费者模型。

    2.4K00

    JavaScript 面试要点: Event Loop (事件循环)

    # 单线程 用于和浏览器交互,JavaScript 诞生时起就是单线程阻塞的脚本语言。 单线程意味着,JavaScript 执行代码的任何时候,都只有一个主线程来处理所有的任务。...阻塞则是当代码需要进行一项异步任务时,主线程会挂起这个任务,然后异步任务返回结果时再根据一定规则去执行相应回调。 单线程必要的,缘于其最初的宿主环境——浏览器,要进行各种 DOM 操作。...所以,严格讲这些线程并没有完整的功能,故无法改变 JavaScript 语言单线程的本质。 那 JavaScript 引擎怎么实现“阻塞”呢?事件循环!...,因为 JavaScript 单线程的,同一时刻只能执行一个方法,所以这些方法被排队一个单独的地方——调用栈。...当事件循环准备进入下一个阶段之前,会先检查 nextTick queue 是否有任务,如果有,会先清空该队列,和 poll queue 不一样,这个操作队列清空前不会停止的。

    68020

    NodeJS异步IO解析

    浏览器JavaScript单线程上执行,而且还与UI渲染共用一个线程,JavaScript执行的时候UI渲染和响应应是出于停滞状态。(如果脚本执行的时间超过100毫秒,用户就会感到页面卡顿)。...单线程安装顺序执行,执行任何一个稍慢都会导致后续执行代码阻塞。对于任务的串行执行(概念上类似于同步执行)和任务的并行执行的描述有如下图: ? ?    ...NodeJS利用单线程,远离死锁、状态同步问题,利用异步I/O,让单线程远离阻塞,以便更好的使用CPU。...阻塞I/O调用之后一定要等到系统内核层面完成所有操作后,调用才结束。阻塞I/O调用后立即返回。关于阻塞I/O和阻塞I/O有如下图: ? ?    ...2.NodeJS异步I/O解析:       事件循环进程启动时,Node会创建一个类似于while(true)的循环,每执行一次循环体的过程称为Tick,每个Tick的过程就是查看是否有时间待处理

    1.5K90

    Redis线程模型

    使用单线程网络模型好处: 避免过多的上下文切换开销 多线程调度过程必然需要在 CPU 之间�切换线程上下文 context,而上下文的切换有开销的。... v6.0 版本之前,Redis 的核心网络模型一直一个典型的单 Reactor 模型:利用 epoll/select/kqueue 等多路复用技术,单线程的事件循环中不断去处理事件(客户端请求)...aeEventLoop本质一个线程,服务启动时就一直循环,调用 aeProcessEvent 处理文件(网络)或者时间事件;等价于JavaNIO的select线程 client :代表一个客户端连接...),最后把 client 添加进一个 LIFO 队列 clients_pending_write; 事件循环 aeMain ,主线程执行 beforeSleep --> handleClientsWithPendingWrites...三、Redis 6.0后的多线程模型(网络线程模型) image.png 如上图,这种模式不再单线程的事件循环,而是有多个线程(IO Thread)各自维护一个独立的事件循环

    83020

    Java基础学习|聊聊Java的三种循环结构

    由于软件安装在硬盘上的,双击的时候操作系统会根据文件路径找到exe程序硬盘的位置,控制其代码从硬盘加载到内存,然后控制CPU从内存读取刚刚读入内存的应用程序的代码执行,应用程序完成启动。...即:一个程序开始的第一条指令存放的位置由操作系统掌控的。那代码如何实现多次指令的呢?...第一种 for for 循环一种计数型循环,通过一个初始值、一个结束值和一个增量来控制循环的执行,使一些循环结构变得更加简单。for循环执行的次数执行前就确定的。...i++,以确保i的值每次循环后都会增加,防止无限循环。......while循环循环增加了i++,以确保i的值每次循环后都会增加,防止无限循环

    14200

    深入探索Java BIO与NIO输入输出模型:基于文件复制和socket通信

    进行读写操作的时候,若使用BIO进行通信,则操作不再受到操作系统的控制,而是由应用程序自己控制。BIO,数据的读取写入必须阻塞在一个线程内等待其完成。...同步:BIO模型,当应用程序发起一个I/O请求(例如读取或写入数据)时,它必须等待操作系统内核完成这个请求。在此期间,应用程序的线程阻塞的,不能做其他事情,直到I/O操作完成。...阻塞:由于应用程序的线程等待I/O操作完成期间不能做其他工作,因此我们说这个线程被阻塞的。阻塞意味着线程不能继续执行后续的代码或处理其他任务,直到当前的I/O操作完成。...2、NIO(New I/O 或 Non-blocking I/O)为什么同步阻塞的? 同步:NIO模型,虽然引入了新的机制和概念(如选择器、通道和缓冲区),但I/O操作仍然同步的。...进入一个无限循环循环中,我们调用selector.select()来阻塞等待直到至少有一个通道准备好进行I/O操作。

    15410

    Python 循环语句

    Python提供了for循环while循环Python没有do..while循环): 循环类型 描述 while 循环 在给定的判断条件为 true 时执行循环体,否则退出循环体。...for 循环 重复执行语句 嵌套循环 你可以while循环嵌套for循环 ---- 循环控制语句 循环控制语句可以更改语句执行的顺序。...Python支持以下循环控制语句: 控制语句 描述 break 语句 语句块执行过程终止循环,并且跳出整个循环 continue 语句 语句块执行过程终止当前循环,跳出该次循环,执行下一次循环。...注意:以上的无限循环你可以使用 CTRL+C 来中断循环。 ---- Python for 循环语句 Python for循环可以遍历任何序列的项目,如一个列表或者一个字符串。...Python 语言允许一个循环体里面嵌入另一个循环

    48130

    Java多线程编程

    一、多线程的优缺点 多线程的优点: 1)资源利用率更好 2)程序设计某些情况下更简单 3)程序响应更快 多线程的代价: 1)设计更复杂 虽然有一些多线程应用程序单线程应用程序要简单,但其他的一般都更复杂...同步块Java同步某个对象上。所有同步一个对象上的同步块同时只能被一个线程进入并执行操作。所有其他等待进入该同步块的线程将被阻塞,直到执行该同步块的线程退出。...这样,每个实例其方法同步都同步不同的对象上,即该方法所属的实例。只有一个线程能够实例方法同步块运行。如果有多个实例存在,那么一个线程一次可以一个实例同步块执行操作。一个实例一个线程。...为了防止假唤醒,保存信号的成员变量将在一个while循环里接受检查,而不是if表达式里。这样的一个while循环叫做自旋锁。 5、不要在字符串常量或全局对象调用wait()。...newScheduledThreadPool 创建一个大小无限制的线程池。此线程池支持定时以及周期性执行任务。 newSingleThreadExecutor 创建一个单线程的线程池。

    55720

    【python入门到精通】python循环语句While,for的使用

    : python While循环语句 python编程While语句用于循环执行程序,即在某条件下,执行某段程序,常常与if…else,for语句一起连用,下面Whlie循环的基本形式: while...break 用法 i = 1 while i < 10: i += 1 if i%2 > 0: # 双数时跳过输出 continue print...i += 1 if i > 10: # 当i大于10时跳出循环 break >>>pass的用法:Python pass 空语句,是为了保持程序结构的完整性。...无限循环 如果条件判断语句永远为 true,循环将会无限的执行下去,如下实例: sum=1 while sum ==1: #该条件即判断永远为True print("无限输出") >...>>输出结果为:打印无数次字符串"无限输出" 循环使用 else 语句 python while … else 循环条件为 false 时执行 else 语句块: count = 0 while

    1.3K20

    Java 3 种常见的 IO 模型

    BIO BIO 即 Blocking I/O;字面意思就可以看出它属于同步阻塞 IO。 如下图,应用程序发出一个 read 调用,内核空间需要经历准备数据的几个阶段,准备好之后返回数据给应用程序。...下面就阻塞模型和多路复用模型作简要区分: 阻塞模型:关键词 轮询 ,例如小明需要找人帮忙,于是找到张三,第一次张三忙,第二次张三还在忙,此后小明的做法一个小时来一次,直到等到张三有空为止。...如图,多路复用模型,线程想获得内核空间的数据,必须先发起 select 系统调用来询问内核空间是否有空;当内核空间有空时会回复应用程序一个 ready 。...使用单线程管理的理由是,从操作系统的角度来看,切换线程开销比较昂贵的,并且每个线程都需要占用系统资源,因此暂用线程越少越好。..., // 而是直接将新连接绑定到clientSelector上,这样就不用 IO 模型 1w 个 while 循环死等 Selector serverSelector = Selector.open

    27530

    初学者也能懂的Event Loop

    JavaScript 一个单线程阻塞的脚本语言,那么这句话单线程代表的是什么呢?为了方便理解,我用一段伪代码来定义单线程。...的伪代码,单线程就是调用过程只有一个主线程来处理问题,只有一个调用栈,并且每次只能处理一件事情。...调用栈清空后,主线程会查看任务队列是否存在未完成的任务,若是有的话,压入调用栈。主线程会无限重复此过程,形成一个无限循环,而这个循环就叫作事件循环。...总结 JavaScript 一个单线程阻塞的脚本语言,单线程指在调用过程只有一个主线程来处理所有任务。...再检查宏任务队列是否有任务,若是有则压一个宏任务入栈。执行完成后,再去检查微任务队列是否有事件存在,无限重复此过程,形成一个无限循环,就叫作事件循环

    41420

    python学习笔记(5)循环语句while,for的使用

    python While循环语句 python编程While语句用于循环执行程序,即在某条件下,执行某段程序,常常与if…else,for语句一起连用,下面Whlie循环的基本形式: while...break 用法 i = 1 while i < 10: i += 1 if i%2 > 0: # 双数时跳过输出 continue print...i += 1 if i > 10: # 当i大于10时跳出循环 break >>>pass的用法:Python pass 空语句,是为了保持程序结构的完整性。...无限循环 如果条件判断语句永远为 true,循环将会无限的执行下去,如下实例: sum=1 while sum ==1: #该条件即判断永远为True print("无限输出") >...>>输出结果为:打印无数次字符串"无限输出" 循环使用 else 语句 python while … else 循环条件为 false 时执行 else 语句块: count = 0 while

    1.5K20

    【本周面试题】第2周 - 看上去和实际上的代码执行顺序

    解析考点: while(){} 就是一个循环语句,判断小括号内的条件,成立则执行大括号内的语句,否则结束循环。...就是0和0会被隐式转换为true or false 隐形考点,while小括号内部,会进行隐式转换,将其他类型的值转为Boolean布尔值类型的进行判断 劝你别去试while(-1){console.log...而while(--i)的时候,先让i减一再去判断是否满足条件。 所以第一种情况i为0的时候被判断不满足条件,不再执行setTimeout,但是后边还是要再-1的,所以最后i变成了-1。...而第二种情况,当i等于1的时候,先让1-1,然后判断0不满足条件,不再执行i为1时的条件语句,所以循环只有4次,且i最终值也为0。...setTimeout定时器导致的 异步任务 js单线程的,而浏览器多线程的。setTimeout属于定时器触发线程的一种。

    44820
    领券