当前位置: 首页 > news >正文

网站资源做缓存国外做饮料视频网站

网站资源做缓存,国外做饮料视频网站,国外外贸需求网站,做flash网站目录 一、背景二、调整普通线程的优先级通过系统命令通过Linux C代码 三、调整实时线程的优先级通过系统命令通过Linux C代码 四、参考资料#xff08;建议一定要阅读#xff09; 在操作系统中#xff0c;线程优先级决定了线程在 CPU 调度时的重要性。较高优先级的线程会在竞… 目录 一、背景二、调整普通线程的优先级通过系统命令通过Linux C代码 三、调整实时线程的优先级通过系统命令通过Linux C代码 四、参考资料建议一定要阅读 在操作系统中线程优先级决定了线程在 CPU 调度时的重要性。较高优先级的线程会在竞争 CPU 资源时被更频繁地调度以保证其及时响应。 一、背景 在Linux中线程是一种轻量级的执行单元可以在进程内独立运行。线程可以分为普通线程和实时线程它们之间的区别在于其调度和优先级设置。 SCHED_OTHER普通的调度非实时线程应用层设置优先级0调度器总会给此类线程分配一定的CPU资源只不过是被分配到的频次和时间片长度较少。每1s中实时线程和普通线程的时间比例是95 5。 普通线程没有固定的响应时间要求它们的优先级由系统动态调整。Linux使用CFS调度器来管理普通线程。CFS调度器采用一种称为红黑树的数据结构来维护线程的优先级。每个线程都有一个vruntime值它表示线程在运行队列中消耗的虚拟时间。CFS调度器会根据线程的vruntime值来确定运行的顺序。优先级较高的线程vruntime值较小因此能够更早地获得CPU的时间片。 适用场景实时性要求不高但要求必须能被执行的线程。 SCHED_FIFO抢占式调度实时线程实时先行应用层设置优先级1-99同一优先级的多个线程中一旦某个抢占式线程获取CPU除非被更高优先级线程抢占比如在非实时线程中创建一个更高优先级的实时线程或该线程主动让出CPU资源否则该线程将会一直占用CPU但总会分配一点资源给SCHED_OTHER非实时线程。 适用场景实时性要求高不希望被频繁打断的任务。 SCHED_RR轮询式调度实时线程实时循环设置优先级1-99以循环方式运行每个线程都有一个时间片来执行任务时间片耗尽后该线程将被放入队列的末尾而较低优先级的线程有机会执行。 适用场景实时性要求高允许被频繁打断的任务。 在Linux中可以使用sched_setscheduler函数。这个函数允许我们选择普通线程或实时线程。对于普通线程可以使用nice函数来动态调整优先级。对于实时线程可以使用sched_setscheduler函数来设置其类型和优先级。   关于优先级高低和数值大小的关系在应用层和内核中二者是相反的。 设置线程的优先级需要谨慎因为过高的优先级可能会导致系统资源的过度占用从而影响其他线程和进程的正常运行。另外需要注意的是只有具有足够权限的用户才能设置较高的实时线程优先级。 总结起来Linux中的线程分为普通线程和实时线程。普通线程的优先级由系统动态调整而实时线程的优先级由用户显式设置。通过合理地设置线程的优先级可以提高系统的性能和响应时间。然而设置线程的优先级需要慎重考虑以避免影响其他线程和进程的正常运行。 二、调整普通线程的优先级 通过系统命令 在 Linux 系统中普通线程非实时线程的优先级可以通过 nice 和 renice 命令来进行设置。这些命令允许用户在命令行中调整线程的优先级而无需特权。 nice命令nice 命令用于启动新的进程并设置其优先级。它在运行指定命令时按照给定的优先级进行调度。较低的优先级对应较高的 nice 值这意味着 nice 值越高优先级越低。命令的基本语法如下 nice -n priority command其中-n 后面跟着要设置的优先级值取值范围一般是-20到19然后是要执行的命令。 例如要以较低的优先级较高的 nice 值运行一个命令可以使用如下命令 nice -n 10 commandrenice命令renice 命令用于修改已经运行的进程的优先级。这使得用户可以在进程运行时动态地调整其优先级而无需停止和重新启动它。命令的基本语法如下 renice priority -p PID其中priority 是要设置的优先级值PID 是要修改优先级的进程的进程 ID。 例如要将进程的优先级调整为较高可以使用如下命令 renice -5 -p 12345其中 12345 是目标进程的进程 ID。 通过 nice 和 renice 命令用户可以在 Linux 系统中方便地设置普通线程的优先级以满足对执行顺序的特定要求。这种方式虽然不能达到实时线程调度的级别但对于一般的任务调度已经足够有效了。 通过Linux C代码 nice 函数用于调整进程的调度优先级允许进程降低自身的优先级从而降低对系统资源的竞争也可以提高自身优先级来更快地响应。在Linux系统中nice 函数的作用是通过改变进程的静态优先级值来影响进程在CPU上的调度顺序。 下面是nice函数的原型 #include unistd.hint nice(int inc);参数 inc 是一个整数表示要增加或减少的进程优先级。这个值的范围通常是 -20 到 19其中 -20 表示最高优先级而 19 表示最低优先级。nice 函数的返回值是新的进程优先级。如果调用成功返回值通常是 0 到 39 之间的数其中 0 表示最高优先级而 39 表示最低优先级。如果调用失败返回值为 -1并设置全局变量 errno 以指示错误原因。 以下是一些需要注意的事项 只有具有 CAP_SYS_NICE 权限Linux内核中的一种权限用于控制进程对于设置任意nice值的能力或者以 root 用户身份运行的进程才能提高进程的调度优先级。通常普通用户只能降低自己进程的优先级。nice 函数的参数 inc 只是相对调整而不是设定一个绝对的优先级值。只能提高或降低一定的优先级而不能直接将进程的优先级调整到一个特定的值。 #include stdio.h #include unistd.h #include errno.hint main() {// 获取当前进程的优先级int currentPriority nice(0);if (currentPriority -1) {perror(Failed to get current process priority);return 1;}printf(Current process priority: %d\n, currentPriority);// 增加进程的优先级int newPriority nice(-5);if (newPriority -1) {perror(Failed to increase process priority);return 1;}printf(Increased process priority to: %d\n, newPriority);return 0; }在 Linux 系统中除了 nice 函数之外还有一个名为 setpriority 的系统调用可用于设置进程的调度优先级。setpriority 函数提供了更灵活的方式来设置进程的优先级它允许指定进程的进程组ID和用户ID而不仅仅是当前进程。 下面是 setpriority 函数的原型 #include sys/resource.hint setpriority(int which, id_t who, int priority);which 参数指定了谁的优先级要被改变。它可以是 PRIO_PROCESS表示改变指定进程的优先级、PRIO_PGRP表示改变指定进程组的所有进程的优先级或者 PRIO_USER表示改变指定用户的所有进程的优先级。who 参数是进程、进程组或用户的 ID用于指定要进行优先级调整的目标。priority 参数是新的进程优先级。其取值范围与 nice 函数相同通常为 -20 到 19。 下面是 setpriority 函数的一个简单示例 #include stdio.h #include sys/resource.h #include unistd.h #include errnoint main() {// 设置当前进程的优先级if (setpriority(PRIO_PROCESS, 0, 10) -1) {perror(Failed to set process priority);return 1;}printf(Process priority set to 10\n);return 0; }在这个示例中setpriority 函数被用来将当前进程的优先级设置为 10。这将影响当前进程的调度优先级。setpriority 函数的使用可以让我们更加灵活地控制进程的调度优先级可以针对不同的进程组或用户进行设置提供了比 nice 函数更细粒度的控制能力。 三、调整实时线程的优先级 通过系统命令 chrt 是一个用于改变进程调度策略或优先级的命令行工具。它在 Linux 系统中提供了对实时进程调度的控制。 chrt 命令的基本语法如下 chrt [options] priority commandchrt 命令的常用选项包括 -p, --pid指定要操作的进程ID。 -f, --fifo设置进程的调度策略为 FIFO先进先出。 -r, --rr设置进程的调度策略为 Round Robin循环调度。 -o, --other设置进程的调度策略为其他进程调度策略。 -m, --max设置进程的优先级为最高优先级。 -e, --min设置进程的优先级为最低优先级。 -p, --priority priority设置进程的静态优先级。 以下是几个使用示例 将进程的调度策略设置为 FIFO先进先出 chrt -f -p 90 command将进程的调度策略设置为 Round Robin循环调度 chrt -r -p 80 command将进程的调度策略设置为其他调度策略如 SCHED_BATCH chrt -o -p 50 command将进程的优先级设置为最高优先级 chrt -m -p 99 command将进程的优先级设置为最低优先级 chrt -e -p 0 command在上述示例中command 是要运行的命令或进程。通过使用不同的选项和参数chrt 命令可以改变进程的调度策略和优先级从而影响进程在系统中的调度行为。请注意使用 chrt 命令可能需要 root 权限或 CAP_SYS_NICE 权限。 通过Linux C代码 #include stdio.h #include stdlib.h #include pthread.h #include sched.h#define THREAD_PRIORITY 80 // 设置实时线程的优先级void* thread_function(void* arg) {// 实时线程的具体操作// ...return NULL; }int main() {pthread_t tid;pthread_attr_t attr;struct sched_param sched_param;// 初始化线程属性pthread_attr_init(attr);// 设置线程为实时线程pthread_attr_setinheritsched(attr, PTHREAD_EXPLICIT_SCHED);pthread_attr_setschedpolicy(attr, SCHED_FIFO);// 设置线程优先级sched_param.sched_priority THREAD_PRIORITY;pthread_attr_setschedparam(attr, sched_param);// 创建实时线程int result pthread_create(tid, attr, thread_function, NULL);if (result ! 0) {fprintf(stderr, Failed to create thread\n);exit(EXIT_FAILURE);}// 等待实时线程结束pthread_join(tid, NULL);// 清理资源pthread_attr_destroy(attr);return 0; }pthread_attr_setinheritsched函数用于设置线程属性的继承调度策略。具体来说它可以控制新创建线程是否继承调用线程的调度策略。函数原型如下 #include pthread.hint pthread_attr_setinheritsched(pthread_attr_t *attr, int inherit);attr是一个指向线程属性对象的指针inherit参数用于设置继承调度策略。inherit可以是以下两个常量之一 PTHREAD_INHERIT_SCHED新线程将继承创建它的线程的调度策略。PTHREAD_EXPLICIT_SCHED使用显式调度策略即通过 pthread_attr_setschedpolicy 设置特定的调度策略。 默认情况下线程属性的继承调度策略是 PTHREAD_INHERIT_SCHED意味着新创建的线程将继承调用线程的调度策略。 下面是一个示例代码演示如何使用 pthread_attr_setinheritsched 函数来设置线程属性的继承调度策略 #include stdio.h #include pthread.hint main() {pthread_attr_t attr;int ret;int inherit;// 初始化线程属性pthread_attr_init(attr);// 获取当前线程属性的继承调度策略ret pthread_attr_getinheritsched(attr, inherit);if (ret 0) {if (inherit PTHREAD_INHERIT_SCHED) {printf(继承调度策略PTHREAD_INHERIT_SCHED\n);} else if (inherit PTHREAD_EXPLICIT_SCHED) {printf(继承调度策略PTHREAD_EXPLICIT_SCHED\n);} else {printf(未知的继承调度策略\n);}} else {printf(获取线程属性的继承调度策略失败\n);}// 设置线程属性的继承调度策略inherit PTHREAD_EXPLICIT_SCHED;ret pthread_attr_setinheritsched(attr, inherit);if (ret 0) {printf(成功设置线程属性的继承调度策略\n);} else {printf(设置线程属性的继承调度策略失败\n);}// 销毁线程属性pthread_attr_destroy(attr);return 0; }四、参考资料建议一定要阅读 Linux进程/线程的调度机制介绍详细解析Linux系统中进程/线程的调度优先级规则 Android 查看线程优先级 android线程栈默认大小 本篇博文引用了大牛文章中的一些精华知识如有侵权联系删除欢迎各位在评论区指导交流
http://www.pierceye.com/news/295925/

相关文章:

  • 深圳网站建设制作哪家好长春网站开发培训
  • 模板下载网站网络公司网站开发
  • 广州市酒店网站设计重庆网站seo设计
  • p2p网站如何建设网站建设 源美设计
  • 电商网站建设图片ps网站首页设计图
  • 网站优化简历模板用土豆做美食的视频网站
  • 帮企业建设网站销售微信朋友圈广告在哪里做
  • 曲阜做网站的公司wordpress两个域名
  • 做设备租赁的网站如何把自己做的网站发布到网上
  • 做网站运营有前景吗关于网站建设意见和建议
  • 如何给网站的关键词做排名南海做网站公司
  • 仿站软件邢台手机网站建设价格
  • 学校网站开发与设计什么是网络营销促销?
  • 胶州网站搭建企业wordpress站内信群发
  • WordPress做的网站源代码网站备案失效
  • 承德网站制作与建设wordpress h5播放器
  • .net网站程序网站建设 报告
  • 中国做的电脑系统下载网站好互动网站
  • 网站使用培训方案网站后台工程师
  • 做网站优化找谁简单网站页面
  • 青岛做公司网站佛山网站建设锐艺传播
  • 江苏商城网站制作公司网站备案时间
  • 网站开发用到什么技术公司做影视网站侵权
  • 自己做网站大概多少钱唐山丰南建设局网站
  • 建设法律法规文本查询网站什么是建设型的网站
  • 如何设计一个购物网站如何免费网络营销推广
  • 网站制作服务好的商家做网站送的企业邮箱能用吗
  • 免费行情软件app网站排行企业内部网站如何建设
  • 沧州网络运营中心在哪里新的seo网站优化排名 网站
  • 米拓建站免费模板wordpress那个主题收录好