公司网站首页怎么制作wordpress全站广告位

web/2025/9/26 17:33:23/文章来源:
公司网站首页怎么制作,wordpress全站广告位,wordpress slideshow,金华企业自助建站系统说起这个softirq #xff0c;很多人还是一头雾水#xff0c;觉得这个是什么东西#xff0c;跟tasklets 和 workqueue有什么不同。每次谈到这个#xff0c;很多人#xff0c;包括我#xff0c;都是有点紧张#xff0c;特别是面试的时候#xff0c;因为你一旦说错了什么很多人还是一头雾水觉得这个是什么东西跟tasklets 和 workqueue有什么不同。每次谈到这个很多人包括我都是有点紧张特别是面试的时候因为你一旦说错了什么那么你这次面试估计就歇菜了。谈到这个我们不得不说中断中断处理我相信很多人都是知道的中断分为上半部和下半部原来的Linux 内核是没有下半部的中断来了就在中断里处理事件说白了就是执行一些函数操作但是这个会导致一个问题就是系统调度慢了对于用户来说你用手机的时候感觉到十分卡顿真想摔了这个手机所以后来就出现了中断下半部。中断下半部的机制有很多种。例如softirq、tasklet、workqueue或是直接创建一个kernel thread来执行bottom half这在旧的kernel驱动中常见现在一个理智的driver厂商是不会这么做的tasklet 是基于softirq实现的所以我们讨论tasklet的时候其实也是在说softirq他们都是运行在中断上下文的。workqueue和softirq不同的是它运行是进程上下文。为什么需要这么多机制来实现中断下半部呢你可以理解我如果要去纽约我可以坐飞机可以坐轮船也可以开小汽车甚至我还可以骑自行车中断下半部也是一样tasklet的出现是因为把softirq封装起来更加方便别人使用。workqueue的话紧急程度就没有softirq那么紧急可以说优先级没有那么高如果是非常紧急的事情比如网络事件我们还是优先使用softirq来实现。Linux 内核里面可以有多少种softirq呢softirq是一种非常紧急的事件所以说不是你想用就用的内核里面定义了一个枚举变量来说明softirq支持的类型。/* PLEASE, avoid to allocate new softirqs, if you need not _really_ high frequency threaded job scheduling. For almost all the purposes tasklets are more than enough. F.e. all serial device BHs et al. should be converted to tasklets, not to softirqs. */enum{ HI_SOFTIRQ0, TIMER_SOFTIRQ, NET_TX_SOFTIRQ, NET_RX_SOFTIRQ, BLOCK_SOFTIRQ, BLOCK_IOPOLL_SOFTIRQ, TASKLET_SOFTIRQ, SCHED_SOFTIRQ, HRTIMER_SOFTIRQ, /* Unused, but kept as tools rely on the numbering. Sigh! */ RCU_SOFTIRQ, /* Preferable RCU should always be the last softirq */ NR_SOFTIRQS};看到上面的那段英文了没它说「大部分情况下tasklets已经满足你的要求就不要只想着用softirq」软中断是什么时候执行的呢软中断和workqueue存在非常大的区别我们在上面说过软中断是在中断上下文的但是中断上半部已经脱离了中断了它如何跟中断上下文存在千丝万缕的联系呢说到这里我们不拿出代码来说那就是耍流氓了。/* * Exit an interrupt context. Process softirqs if needed and possible: */void irq_exit(void){#ifndef __ARCH_IRQ_EXIT_IRQS_DISABLED local_irq_disable();#else WARN_ON_ONCE(!irqs_disabled());#endif account_irq_exit_time(current); preempt_count_sub(HARDIRQ_OFFSET); if (!in_interrupt() local_softirq_pending())//此处判断是否从中断上下文退出并判断是否有软中断任务挂起待处理 invoke_softirq();//启用排程软中断处理 tick_irq_exit(); rcu_irq_exit(); trace_hardirq_exit(); /* must be last! */}我们看看irq_exit()这个函数这个函数是在什么时候调用就是中断上半部执行结束后需要跳出中断上半部的时候我们需要执行irq_exit()然后在里面有一个判断。if (!in_interrupt() local_softirq_pending()) invoke_softirq(); tick_irq_exit(); rcu_irq_exit(); trace_hardirq_exit(); /* must be last! */}这几行代码就是判断当前是否需要执行软中断说白了就是CPU需要执行一段优先级非常高的代码这段代码需要在中断结束关闭中断后马上执行。#define local_softirq_pending() this_cpu_read(irq_stat.__softirq_pending)那我们在中断上半部执行结束后如何设置需要执行softirq呢使用这个函数#define set_softirq_pending(x) __this_cpu_write(irq_stat.__softirq_pending, (x))softirq相关的代码都在 softirq.c 这个文件里面如果想有更深入了解的同学可以一睹源码风采不吹C语言的源码真是一个宝藏细细评味可以挖掘出非常多的好东西。我们分析下 invoke_softirq这个函数是执行softirq的函数里面也有一些判断的东西我看了下源码理解了下顺便解读下自己的看法如果有疑问或者问题的请读者们指出来只有不断的探讨大家才可能收获更多的东西。static inline void invoke_softirq(void){ if (!force_irqthreads) {#ifdef CONFIG_HAVE_IRQ_EXIT_ON_IRQ_STACK /* * We can safely execute softirq on the current stack if * it is the irq stack, because it should be near empty * at this stage. */ __do_softirq();#else /* * Otherwise, irq_exit() is called on the task stack that can * be potentially deep already. So call softirq in its own stack * to prevent from any overrun. */ do_softirq_own_stack();#endif } else { wakeup_softirqd(); }}不会看注释的码农不是好码农不写注释的码农就不是码农如果你想写代码就一定要会写注释同时你也要会看别人的注释好吧这类源码都是老外写的所以我们一定要习惯看英文注释慢慢看不要着急学会上下文推敲这样才像一个大神嘛。我不是大神所以我就瞎说一下上面使用一个 force_irqthreads 来区分一个东西就是软中断上下文软中断上下文是不能睡眠的你知道的你要是在中断里面睡眠那系统调度就起不来了起不来的原因那可真是五花八门因为你不知道进入中断的时候做了什么事情在中断里面的时候我们只有更高优先级的中断才能打断当前中断现在新版本的Linux内核取消了中断嵌套那你要是在中断里面睡觉就没有人叫你起床了那就只能出现panic挂机了。用我的话来说那就是睡死了。如果你的softirq里面执行很多东西在软中断上文没有执行完那你就需要用到软中断线程把剩下的事情做完然后就出现了wakeup_softirqd()这个就是处理软中断下半部的。看看__do_softirq()里面做的事情吧asmlinkage __visible void __softirq_entry __do_softirq(void){ unsigned long end jiffies MAX_SOFTIRQ_TIME; //最大处理时间2毫秒 unsigned long old_flags current-flags; int max_restart MAX_SOFTIRQ_RESTART; //最大回圈次数10次 struct softirq_action *h; bool in_hardirq; __u32 pending; int softirq_bit; /* * Mask out PF_MEMALLOC s current task context is borrowed for the * softirq. A softirq handled such as network RX might set PF_MEMALLOC * again if the socket is related to swap */ current-flags ~PF_MEMALLOC; pending local_softirq_pending(); //获取本地CPU上等待处理的软中断掩码 account_irq_enter_time(current); __local_bh_disable_ip(_RET_IP_, SOFTIRQ_OFFSET); in_hardirq lockdep_softirq_start();restart: /* Reset the pending bitmask before enabling irqs */ set_softirq_pending(0); //清除本地CPU上等待处理的软中断掩码 local_irq_enable(); // 开中断状态下处理软中断 h softirq_vec; // h指向软中断处理函式阵列首元素 while ((softirq_bit ffs(pending))) { //依次处理软中断软中断编号越小越优先处理优先顺序越高 unsigned int vec_nr; int prev_count; h softirq_bit - 1; vec_nr h - softirq_vec; prev_count preempt_count(); kstat_incr_softirqs_this_cpu(vec_nr); trace_softirq_entry(vec_nr); h-action(h); //呼叫软中断回拨处理函式 trace_softirq_exit(vec_nr); if (unlikely(prev_count ! preempt_count())) { pr_err(huh, entered softirq %u %s %p with preempt_count %08x, exited with %08x?\n, vec_nr, softirq_to_name[vec_nr], h-action, prev_count, preempt_count()); preempt_count_set(prev_count); } //回圈下一个等待处理的软中断 h; pending softirq_bit; } rcu_bh_qs(); local_irq_disable(); //关中断判断在处理上次软中断期间硬中断处理函式是否又排程了软中断 pending local_softirq_pending(); if (pending) { //软中断再次被排程 if (time_before(jiffies, end) !need_resched() --max_restart) //没有达到超时时间也不需要被排程并且排程次数也没有超过10次 goto restart; //重新执行软中断 wakeup_softirqd(); //否则唤醒软中断核心执行绪处理剩下的软中断当前CPU退出软中断上下文 } lockdep_softirq_end(in_hardirq); account_irq_exit_time(current); __local_bh_enable(SOFTIRQ_OFFSET); WARN_ON_ONCE(in_interrupt()); current_restore_flags(old_flags, PF_MEMALLOC);}这段代码主要是展示了软中断上下文的处理策略一次处理所有等待的软中断处理轮训结束或者时间超过2ms就跳出软中断上下文跑到软中断线程里面去执行避免系统响应过慢。如何加入新的软中断说了那么多这个应该是重点了一直强调不要加软中断使用tasklet就够了但是无法避免就是有人要用啊。内核使用下面函数来新增一个软中断void open_softirq(int nr, void (*action)(struct softirq_action *)){ softirq_vec[nr].action action;}当然了你可以新增一个枚举变量内核里面是这样使用下面这个函数调用open_softirq(RCU_SOFTIRQ, rcu_process_callbacks);好了就说这么多~右下角你懂的ʕ•̫͡•ʕ*̫͡*ʕ•͓͡•ʔ-̫͡-ʕ•̫͡•ʔ*̫͡*ʔ-̫͡-ʔ—————END—————扫码或长按关注回复「 加群 」进入技术群聊

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/81459.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1688网站特色免费推广网站

0 复习上一关我们学习了selenium,它有可视模式与静默模式这两种浏览器的设置方法,二者各有优势。然后学习了使用.get(URL)获取数据,以及解析与提取数据的方法。在这个过程中,我们操作对象的转换过程:除了上面的方法&am…

网站app开发计划书廊坊网站关键词排名

Viggle AI 是一款基于骨骼动画的 AI 工具,可以将图片转换为流畅且一致的角色动画。 这意味着您可以上传一张模特全身照,然后指定该模特要执行的动作,Viggle AI 会自动生成一段由该模特执行该动作的视频。 步骤 1:准备工作 首先&…

网店代运营托管南宁求介绍seo软件

“电脑不时的突然出现蓝屏”,“开机之后毫无规律的死机”,“开不了机,一开机就出现嘶鸣声”,如果你的电脑出现了以上情况,就是你的内存兼容性出了问题,那么这种故障该如何解决呢?下面&#xff0…

中国铁道工程建设协会查证网站临海企业网站建设公司

zookeeper 集群 1、zookeeper 集群说明 initLimit 是Zookeeper用它来限定集群中的Zookeeper服务器连接到Leader的时限 syncLimit 限制了follower服务器与leader服务器之间请求和应答之间的时限 服务器名称与地址:集群信息(服务器编号,服务器…

wordpress声明插件深圳营销型网站seo

前言: 准备笔试题中,这几天复习排序算法,尽量一天学一两个,并且以能手写代码的理解方式写出来。 冒泡排序: 思路: 首先,一定要先有一个场景,比如 1 3 9 5 4 现在想象它&#xff…

佛山禅城网站建设企业vi包含哪些内容

网页基础知识网页的构成网页由html、css和Javascript构成,html是框架,CSS是样式和装饰,JS则是各项功能实现。我们把网页的组成类比成一栋房子,Html相当于房子的结构,CSS相当于房子的装修装饰,JavaScript相当…

flash 开发的网站网页设计过程报告

Oracle 19cADG集群补丁升级 文章目录 Oracle 19cADG集群补丁升级1.备库备份2.备库升级Opatch3.备库应用补丁4.主库备份 oracle_home目录5.主库升级Opatch6.注册补丁7.编译无效对象8.检查主库的补丁注册情况9.备库切换主库完成补丁注册 1.备库备份 su - oracle cd $ORACLE_HOME…

广州网站推广工具开发一个软件需要什么过程

点击上方蓝色关注我们!今天批改的作业不仅仅是卡个印有“优”字样式的章,当然也不仅仅是用红笔写个“SSSS9.28”字样的批语了。除了给每个学生的作业本上都卡了“优”的章之外,还送给每位同学一句或长或短的话,有表扬有批评&#…

jsp做网站 案例中山网站建设外包

一、如何从任意一页开始编码无论是做标书,还是写论文,都有一个给word文档编页码的问题。一般封面、目录、内容提要等前几页不要页码,页码从正文开始编起;或者前面内容编不同于正文的页码,或其中的某一页用罗马数字的页…

做外国购物网站需要交税吗wordpress 4.7.2下载

java itext5 生成PDF并填充数据导出 依赖**文本勾选框****页眉**&#xff0c;**页脚****图片**实际图 主要功能有文本勾选框&#xff0c;页眉&#xff0c;页脚&#xff0c;图片等功能。肯定没有专业软件画的好看&#xff0c;只是一点儿方法。仅供参考。 依赖 <!--pdf-->&…

网站开发周期不需要iis的网站开发

近年来&#xff0c;智慧城市建设出现新的动向&#xff0c;包括城市大脑、城市云脑、城市超级大脑、城市超脑、城市神经网络等“泛城市大脑”概念也大量涌现。杭州、上海、北京、广州等城市各自提出和开展了不同城市大脑建设方案&#xff0c;其中上海市开展了以建设城市神经元系…

工程项目建设自学网站举报网站制度建设方面

一、overview 基于pytorch的深度学习的四个步骤基本如下&#xff1a; 二、线性模型 - Linear Model 基本概念 数据集分为测试集和训练集&#xff08;训练集、开发集&#xff09;训练集&#xff08;x&#xff0c;y&#xff09;测试集只给&#xff08;x&#xff09;过拟合&#…

创造力网站设计wordpress汉字后缀图片不显示

前言 最近在使用Flask框架&#xff0c;写一个小项目&#xff0c;在项目部署启动后&#xff0c;出现了以下这段提示&#xff0c;这段提示的意思是&#xff0c;该启动方式适用于开发环境中&#xff0c;生产环境要使用WSGI服务器。 WARNING: This is a development server. Do no…

哪个网站seo做的最好深圳做网站专业

在平时个人开发的过程中是不是有这样的烦恼&#xff1a; 项目开发完成&#xff0c;Push之后 登录服务器&#xff0c;手动git pull&#xff0c;然后运行部署命令 这真的很烦诶&#xff01; 那么能不能Git push之后&#xff0c;远端服务器自动 Git pull 然后运行部署命令呢&a…

免费的行情网站可以先做网站再开公司吗

Linux系统中经常会使用软连接指向其他目录或文件以快速方便的访问,那么如何读取软连接指向的位置呢,可以通过readlink函数: #include <unistd.h> ssize_t readlink(const char *pathname, char *buf, size_t bufsiz); 参数说明: pathname:软连接的路径 buf:…

网站负责人信息邢台招聘网最新招聘信息

1 多表联查 1.1 表之间的关系 表和表的关系有: 一对一 老公 --> 老婆 , 人 ---> 身份证/户口本 一对多 皇帝 --> 妻妾 , 人 ---> 房/车 多对多 订单 --> 商品 1.2 合并结果集 合并结果集,是将多表查询的结果纵向合并 语法: select field1,field2 from t1 un…

a站全名叫什么中英文网站切换怎么做

1. 如何使用Linux中的包管理器进行软件包依赖管理&#xff1f; Linux中的包管理器如apt、yum等可以自动处理软件包的依赖关系。当安装或升级软件包时&#xff0c;包管理器会自动解决软件包的依赖关系&#xff0c;确保所需的库和工具都已经安装。掌握如何使用包管理器进行依赖管…

兰亭集势网站模板成都建设银行招聘网站

先过我这一关 - signal 在运行程序的时候&#xff0c;一般都知道运行 CtrlC 八成就会把程序给中断&#xff0c;类似于应用程序里面的CLOSE &#xff0c;但是如果有些数据在运行过程中没有保存&#xff0c;就会比较尴尬&#xff0c;此时就需要借助signal同学&#xff0c;让他对…

网页对于网站有多重要河北seo技术培训

事件驱动程序设计总览 开发人员经常询问系统或其代码的性能或效率。 这到底是什么意思&#xff1f; 我的代码是如此高效&#xff0c;只有编码神能理解它的工作原理。 我的代码确实很聪明&#xff0c;但是却难以维护。 下一位开发人员将继续重写它。 我的代码对机器确实很有效…

京东商城网站建设策划书关键词分布中对seo有危害的

常见的坐标系 在使用ROS进行定位导航等操作时&#xff0c;我们经常会遇到各种坐标系。每种坐标系都有明确的含义。理论上坐标系的名称可以是随意的&#xff0c;但是为了方便不同的软件间共享坐标信息&#xff0c;ROS定义了几个常见的坐标系。 1.base_linkbase_link坐标系和机…