程序开发中yield是什么,怎么用?sleep和yield的区别
本文目录
程序开发中yield是什么,怎么用
yield 表达式在定义 generator 函数或是 asynchronous generator 的时候才会用到。 因此只能在函数定义的内部使用yield表达式。 在一个函数体内使用 yield 表达式会使这个函数变成一个生成器,并且在一个 async def 定义的函数体内使用 yield 表达式会让协程函数变成异步的生成器。由于它们会对外层作用域造成附带影响,yield 表达式不被允许作为用于实现推导式和生成器表达式的隐式定义作用域的一部分。在 3.8 版更改: 禁止在实现推导式和生成器表达式的隐式嵌套作用域中使用 yield 表达式。下面是对生成器函数的描述,异步生成器函数会在 异步生成器函数 一节中单独介绍。当一个生成器函数被调用的时候,它返回一个迭代器,称为生成器。然后这个生成器来控制生成器函数的执行。当这个生成器的某一个方法被调用的时候,生成器函数开始执行。这时会一直执行到第一个 yield 表达式,在此执行再次被挂起,给生成器的调用者返回 expression_list 的值。挂起后,我们说所有局部状态都被保留下来,包括局部变量的当前绑定,指令指针,内部求值栈和任何异常处理的状态。通过调用生成器的某一个方法,生成器函数继续执行。此时函数的运行就和 yield 表达式只是一个外部函数调用的情况完全一致。恢复后 yield 表达式的值取决于调用的哪个方法来恢复执行。 如果用的是 __next__() (通常通过语言内置的 for 或是 next() 来调用) 那么结果就是 None. 否则,如果用 send(), 那么结果就是传递给send方法的值。所有这些使生成器函数与协程非常相似;它们 yield 多次,它们具有多个入口点,并且它们的执行可以被挂起。唯一的区别是生成器函数不能控制在它在 yield 后交给哪里继续执行;控制权总是转移到生成器的调用者。在 try 结构中的任何位置都允许yield表达式。如果生成器在(因为引用计数到零或是因为被垃圾回收)销毁之前没有恢复执行,将调用生成器-迭代器的 close() 方法. close 方法允许任何挂起的 finally 子句执行。
sleep和yield的区别
yield和sleep的区别:
yield和sleep的主要是,yield方法会临时暂停当前正在执行的线程,来让有同样优先级的正在等待的线程有机会执行。
如果没有正在等待的线程,或者所有正在等待的线程的优先级都比较低,那么该线程会继续运行。执行了yield方法的线程什么时候会继续运行由线程调度器来决定,不同的厂商可能有不同的行为。
yield方法不保证当前的线程会暂停或者停止,但是可以保证当前线程在调用yield方法时会放弃CPU。
Java中wait、sleep的区别或者Java中sleep、yield的区别是Java面试或者多线程面试中最常问的问题之一。在这3个在Java中能够用来暂停线程的方法中,sleep和yield方法是定义在Thread类中,而wait方法是定义在Object类中的, 这也是面试中常问的一个问题。
wait和sleep的关键的区别在于,wait是用于线程间通信的,而sleep是用于短时间暂停当前线程。更加明显的一个区别在于,当一个线程调用wait方法的时候,会释放它锁持有的对象的管程和锁,但是调用sleep()方法的时候,不会释放他所持有的管程。
回到yield()方法上来,与wait和sleep方法有一些区别,它仅仅释放线程所占有的CPU资源,从而让其他线程有机会运行,但是并不能保证某个特定的线程能够获得CPU资源。
谁能获得CPU完全取决于调度器,在有些情况下调用yield方法的线程甚至会再次得到CPU资源。所以,依赖于yield方法是不可靠的,它只能尽力而为。
以上内容参考:百度百科--Java编程语言
本文相关文章:

calc exe(calc.exe应用程序错误指什么错误该如何处理)
2025年4月10日 12:50

openjudge(约瑟夫问题c++程序运行正常,但为什么在OpenJudge网站里显示Runtime error呢)
2025年4月8日 19:20

java接口代码(不同编程语言的程序可不可以通过接口相互调用)
2025年4月1日 13:00

c语言程序设计 谭浩强(谭浩强在程序员圈子里的口碑如何为什么)
2025年3月30日 13:50

widevine(HTC 手机 开机说 Android 正在升级 正在优化第1个应用程序 共36个)
2025年3月29日 22:40

zencart下载(如何用xampp搭建本地环境并安装zencart程序)
2025年3月29日 15:20

provision apk(摩托罗拉xt800可以删除的系统程序有哪些)
2025年3月29日 06:50

python实现socket编程(python功能强大,开发网络程序如何快速入门)
2025年3月23日 12:30

谭浩强c语言电子版(哪本书最适合初学电工电子比如初学C语言就用谭浩强C程序设计,单片机就郭天祥单片机)
2025年3月23日 06:30
更多文章:

simpleadapter(android代码使用SimpleAdapter的filter方法进行过滤问题)
2025年4月8日 04:10

ultraedit安卓(安卓十六进制编辑器如何批量删除和修改)
2025年3月10日 00:10

killbackground(ipad如何通过手摇来清除后台程序)
2025年2月26日 19:00

hands in pockets(put one`s hand in one`s pocket 造句)
2025年2月9日 13:50

vs开发android教程(如何学习Android studio)
2025年3月13日 20:00

android studio下载不了(android studio 怎么安装不了)
2025年4月20日 03:50

手机app制作用什么软件(有什么好用的手机APP制作软件,电脑版)
2025年4月16日 02:20

redhat最新版本是多少(redhat最新版本是什么时候发布的)
2025年3月5日 15:10

css3教程flex(css3 flex 子元素添加边框后的问题)
2025年3月25日 03:50

format long(matlab中format long函数详细用法)
2025年3月29日 10:00

js splice会改变原数组吗(Javascript中如何删除数组中指定元素后形成新的数组)
2025年3月19日 12:40

有什么浏览器可以将英文网站翻译成中文?有什么浏览器可以直接把韩文网站翻译成中文的
2025年3月30日 00:30

美国vps速度怎么样快不快吗?性价比高的美国VPS有哪些哪个比较值得选用
2025年4月6日 14:10