collamark
Mark the best lines
Install CollaMark
last_pool记录了上一次该work是被哪一个worker pool处理的
统定义了两个最大值WQ_MAX_ACTIVE(512)和WQ_UNBOUND_MAX_ACTIVE(和cpu数目有关,最大值是cpu数目乘以4,当然也不能大于WQ_MAX_ACTIVE),分别限定per cpu workqueue和unbound workqueue的最大可以创建的worker thread的数目。wq_clamp_max_active可以将max active限制在一个确定的范围内。
了解决这个问题,实际上unbound workqueue实际上是创建了per node的pool_workqueue(thread pool)
本质上,thread pool应该创建属性一样的worker thread。因此,我们通过workqueue属性来对unbound workqueue进行分类,workqueue属性定义如下:
针对worker线程有下面几个考量点(
对于per cpu类型,cpu_pwqs指向了一组per cpu的pool_workqueue数据结构,用来维护workqueue和per cpu thread pool之间的关系
和这个workqueue相关的pool_workqueue被挂入一个链表,链表头就是workqueue_struct中的pwqs成员。
当thread正在处理B work的时候,该worker thread一直执行B work,因为它是cpu intensive的,特别吃cpu,这时候,thread pool是不会创建新的worker的,因为当前还有一个worker是running状态,正在处理B work。这时候C Dwork实际上是得不到执行,影响了并发。
和WQ_MEM_RECLAIM这个flag相关的概念是rescuer thread。
当thread pool中处于运行状态的worker thread等于0,并且有需要处理的work的时候,thread pool就会创建新的worker线程。当worker线程处于idle的时候,不会立刻销毁它,而是保持一段时间,如果这时候有创建新的worker的需求的时候,那么直接wakeup idle的worker即可。一段时间过去仍然没有事情处理,那么该worker thread会被销毁。
以运行在任意的cpu上。这种thread pool是动态创建的,是和thread pool的属性相关
这种线程池有两种,一种叫做normal thread pool,另外一种叫做high priority thread pool,分别用来管理普通的worker thread和高优先级的worker thread,而这两种thread分别用来处理普通的和高优先级的work。这种类型的线程池数目是固定的
在CMWQ中,用户可以根据自己的需求创建workqueue,但是已经和后端的线程池是否创建worker线程无关了,是否创建新的work线程是由worker线程池来管理。
前端的操作包括二种,一个是创建workqueue。可以选择创建自己的workqueue,当然也可以不创建而是使用系统缺省的workqueue。另外一个操作就是将指定的work添加到workqueue。
應敘明原因,申請展期一次,期限 為三個月。未依規定申請展期,或已逾展期期限仍未開工者,其建造執照 或雜項執照自規定得展期之期限屆滿之日起,失其效力。
正義審判
足夠的了解
對事不對人
謹慎和有愛心
徐朝霞自2015年6月开始投资新生活公司批发模式后,为获得高额提成等非法经济利益,谋取级别晋升,积极发展团队成员,参与非法集资,从经销商晋升为经理,其在共同犯罪中的行为和作用并非系辅助或次要作用,不符合从犯的法律规定,依法不能认定为从犯,对其辩护人所提徐朝霞系从犯的辩护意见不予采纳。
More
Terms
Privacy Policy
Contact