派工引擎怎么写才不卡?
台系CIM入门解说 · 第29篇 | 主线案例:Lot L261029-A01-001|12寸晶圆|产品A01

早上八点十分,三千盒货在等一句话
2026 年 8 月 12 日,早上八点十分。夜班刚交班,白班的第一波货集中出站。
阿凯盯着屏幕,看着两个数字往上跳:全厂在制 Lot 五千一百多个,等待派工的三千出头。
新版派工引擎是昨天半夜上的。老周的原话是"先一条线跑一周",厂长嫌慢,说"就一条线,能出什么事",于是直接推了全厂。
八点十二分,阿凯刷新了一次。单次派工耗时:80 毫秒。
八点十五分:600 毫秒。
八点十九分:2.3 秒。
"周哥。"他声音有点抖。
老周凑过来看了一眼,只说了一个字:"停。"
八点二十六分,回滚完成。这二十二分钟里,全厂三百多台设备有四十多台空转,搬送轨道上堵了七十多盒货,一条线停了二十分钟。
派工慢,到底慢在哪
复盘的时候,问题不在算法。
派工要算两件事:这台机器能不能做,这盒货该不该先做。能不能做,看认证、看机台状态、看刀具寿命、看腔体;该不该先做,看交期、看优先级、看有没有插单。
第 7 篇打过的比方,这里再用一次:RTD 是餐厅的领位员。门口排着几千个客人,里面几十张桌子。一个好领位员不会每来一个人,就把整个餐厅重新量一遍尺寸。
旧版为什么快?因为它先偷了个懒——按产品查一张"哪些机台能做"的表,五百台里通常筛出八台,再在这八台里算分数。八台乘几十条约束,几十毫秒算完。
新版为什么慢?阿凯为了"更准",把粗筛那一步砍了,改成全量精算:三千个 Lot,每个 Lot 对着三百多台机器、两百多条约束算一遍。听着很专业,实际上是把领位员变成了一个每次都要重新丈量整个餐厅的人。
"先粗筛再精算,"老周说,"这不是偷懒,是常识。被筛掉的那些,本来就不可能。"
粗筛之后,还得排个先后。这一层看着简单,其实最容易被业务吵翻。
每个 Lot 进来都带着一个分数:交期还剩几小时、已经等了多久、客户等级、是不是急单。三项加权,算出一个数。急单插进来,临时加五百分,排到前面去;加完之后如果它把三个正常单挤到超期,系统会亮黄灯,让计划员自己看一眼再确认。
阿凯第一版把权重写成了固定值,交期占七成。上线第一周,一个等了十九个小时的小单一直排不上,班组长跑来问:"这盒货是不要了吗?"后来权重改成可配,等待时长单独占一档,超八小时强制提分。
派工不只是算得快,还得算得让人服气。
卡住的不是算法,是那把锁
粗筛加回去,压测里又冒出一个更麻烦的问题。
派工要锁机台。锁的意思是:这台机器我定了,别人别抢。问题在锁怎么加。
阿凯最初的写法,是每次派工都去数据库里锁一行机台记录,算完再放开。单线程跑没问题,几十个线程一起跑就变成排队:一个线程拿着 ET02 的锁在算,另外三十个线程在门口等,等到超时、报错、重试,接着再等。
压测到第十七分钟,数据库连接池打满,最长的一次锁等待 8 秒。
老周让他把锁挪到内存里,按机台号分段:一号到五十号一把锁,五十一号到一百号一把锁,各排各的队,互不影响。再把机台状态、认证清单、刀具寿命这些天天要查的东西放进缓存,十秒刷一次。
改完再压,单次派工回到 70 毫秒,三千个 Lot 派完用了四分钟。
"锁不是越少越好,"老周说,"是要锁得足够小。你把整排桌子一锁,别人连门都进不来。"
压测要按两倍的量来挤
这里解释一个词:压测,就是故意用几倍的量去挤它,看它从哪个量开始喘。
阿凯第一次压测,用的是真实峰值:三千个 Lot 同时排队,每分钟六百次派工请求。跑了两小时,指标漂亮,他准备收工。
老周把他拦住:"按两倍来。"
"两倍?我们厂哪有六千个 Lot 同时等派工?"
"现在没有。明年产能扩三分之一,后年再上一条线,就有了。"老周说,"系统不是给今天造的。你按今天的峰值造,明年的峰值一来,你就得再回滚一次。"
第二次压测:六千个 Lot,每分钟一千二百次请求,连续跑四小时。前四十分钟一切正常,第四十一分钟内存开始涨——缓存里堆了一批已经派完的 Lot 没清掉,两小时后堆到九十万条,垃圾回收一卡,全厂停摆。
这回改的是过期清理:派完的 Lot 出缓存,取消的派工立刻释放锁,超时没回执的单独进一个补账队列,不跟正常派工抢资源。
还有一处阿凯没想到的:压测脚本最初是一条平线,每秒钟均匀地发请求。老周看了一眼就笑了:"真实流量不长这样。"厂里的派工请求集中在交接班后的十五分钟,早八点那一波能占全天的两成,中间还有设备突然停机带来的小尖峰。
脚本改成带尖峰的形状再压,才压出了锁等待那个问题。平均负载好看,尖峰顶不住,一样堵。
派工引擎为什么最像实时系统
一篇写下来,骨架就四件事:先粗筛再精算,锁要锁得小,缓存要清得勤,压测按两倍挤。
听着都不高深,但没有一件能省。因为派工引擎跟 CIM 里别的模块不一样:账本晚记三分钟,补上就行;报表晚出一天,没人停工;派工晚三秒,几百盒货在门口站着,搬送车堵在轨道上,人也跟着一起等。
它是这套系统里最像"实时系统"的一块。不是因为它算得多聪明,是因为它没有"等会儿再说"这个选项。
老周说:"派工引擎的本事,不在算得多准,在几千盒货一起挤的时候还算得完。"
这套引擎现在每天派工四十多万次,最忙的一个小时派了三万次,最长一次卡顿 400 毫秒。
系统这边算是稳住了。可系统跑得再稳,也得跟机器说得上话。国产的系统去接台厂用了十几年的设备,中间那些说不清的地方,才是真正耗时间的活。
下一篇:《国产CIM对接台厂设备,坑都在哪?》——这个系列的收尾篇。





