Linux下的sleep()和sched_yield()(转)

摘要:
这和睡眠()有什么区别?sched_eyield()函数可以使用另一个级别等于或高于当前线程的线程首先运行。而休眠是在一定时间后等待CPU调度,然后获取CPU资源。手册中说,Strategicalosched_Yield()可以通过在调用方释放了满足的资源时给其他线程或进程一个机会来提高性能。Yield(()可以在资源竞争严重时给其他的线程或进程运行的机会来提高程序性能。也就是说,调用sched_Yield()允许当前线程放弃资源,并通过某些策略调用sched_Yield()满足您的业务需求,以确保所有线程或进程都有机会运行。


阿里四面被问到了这个问题,一脸懵逼,下来也没找到什么阐述这个的文章,就自己查man来对比总结一下吧:

sched_yield()的man手册描述如下:

DESCRIPTION
       sched_yield()  causes  the  calling  thread to relinquish the CPU.  The  thread is moved to the end of the queue for its static priority  and  a  new thread gets to run.

RETURN VALUE
       On  success,  sched_yield()  returns  0.  On error, -1 is returned, and errno is set appropriately.

ERRORS

       In the Linux implementation, sched_yield() always succeeds.

翻译一下,sched_yield()会让出当前线程的CPU占有权,然后把线程放到静态优先队列的尾端,然后一个新的线程会占用CPU。那这个和sleep()有啥区别呢?

sched_yield()这个函数可以使用另一个级别等于或高于当前线程的线程先运行。如果没有符合条件的线程,那么这个函数将会立刻返回然后继续执行当前线程的程序。 

而sleep则是等待一定时间后等待CPU的调度,然后去获得CPU资源(这也是usleep()为什么不准的原因)。

那么什么时候使用sched_yield()呢?man手册是这么说的

 Strategic calls to sched_yield()  can  improve  performance  by  giving other  threads  or processes  a chance to run when (heavily) contended  resources (e.g., mutexes) have been  released  by  the  caller.

翻译一下,有策略的调用sched_yield()能在资源竞争情况很严重时,通过给其他的线程或进程运行机会的方式来提升程序的性能。也就是说,调用sched_yield()能让你的当前线程让出资源,通过一定的策略调用sched_yield()满足你的业务要求可以保证各个线程或进程都有机会运行。
————————————————
版权声明:本文为CSDN博主「曾柯」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zk3326312/article/details/79624199

免责声明:文章转载自《Linux下的sleep()和sched_yield()(转)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Asp.net实现MVC处理文件的上传下载删除功能实例教程SVN异常处理(五)-状态小图标不见了下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Linux 下 FreeSWITCH 远程连接使用 MySQL 替代 SQLite

1. 安装unixODBC 和 MySQL ODBC Connector yum install unixODBC-devel mysql-connector-odbc 2. 创建软连接 ln -s libmyodbc5.so libmyodbc.so 3. 在远程MySQL服务器中创建数据库“freeswitch” ,创建有密码用户 4. 添加如下...

LINUX使用SSH远程终端时,如何将运行时间长的程序在后台挂起,下次SSH登陆时继续使用同一个SHELL?

我在某个平台上购买了一个云服务器,LINUX操作系统无图形化界面,硬盘空间较小。虽然在平台上可以通过其自带网页版VNC界面登陆SHELL进而操控云主机,但是每次需要操控都得打开网页登陆进平台,然后再进行一系列点击操作才能进入VNC界面,有点繁琐。并且有时出门在外,使用手机浏览器不是很好的兼容VNC界面,所以一般情况下我习惯于通过SSH客户端登陆SHELL。...

安装cuda实践

------------恢复内容开始------------ 开头想网络安装,发现从invidia下载东西很慢,改为下载到本地再安装。 反正证书之类的,需要先下载到本地再安装。kx上网或者不kx上网,两个方式都尝试下,下载证书或者是安装包。 两个方式都不能下载的话,我安装uget,然后就下载成功了。而,uget网上说需要先add ppa,这样操作是失败的。...

Jenkins:Linux下安装部署步骤

【转载:https://www.cnblogs.com/code-juggler/p/9177805.html】 1. 准备环境   首先,需要jdk是必须要安装好的。本人使用的linux是centos,直接使用yum安装。   先找到合适的版本://至少1.8 yum search java | grep jdk   然后运行安装: yum instal...

(转) Linux命令学习手册-arp命令

arp 原文:http://blog.chinaunix.net/uid-9525959-id-3318814.html [功能] 管理系统的arp缓存。 [描述] 用来管理系统的arp缓存,常用的命令包括: arp:显示所有的表项。 arp-daddress:删除一个arp表项。 arp-s address hw_addr:设置一个arp表项。 常用参数...

Linux下的crontab定时、执行任务命令详解 oracle 自动备份

在LINUX中,周期执行的任务一般由cron这个守护进程来处理[ps -ef|grep cron]。cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间。cron的配置文件称为“crontab”,是“cron table”的简写。 一、cron服务  cron是一个linux下 的定时执行工具,可以在无需人工干预的情况下运行作业。  se...