LED大屏上,《魔途》的状态面板一个接一个变红。
第一集群。红。
第二集群。红。
第三集群。红。
全红了。
底下有人掏出手机试着登录《魔途》。进不去。客户端卡在加载界面,转圈。
赵磊从座位上站起来,脸上的笑还没收回去。他掏出笔记本电脑,当场打开,连上酒店WiFi,远程登了一台跳板机。
敲了两行命令。
没有回应。
他又敲了一行。屏幕上吐出一行错误日志。
“deadlockdetected:processAwaitingforlockheldbyprocessB,processBwaitingforlockheldbyprocessA…”
死锁。
逻辑死锁。
赵磊盯着那行日志,手指悬在键盘上方。
他认识这个。不是系统级的死锁。是业务逻辑层面的。写在游戏引擎底层的。
他回头看了一眼李栋。李栋也打开了电脑,脸色不对。
“赵哥,我查了一下触发条件。是并发连接数等于一十万的时候,底层有一段代码会把所有线程的锁标记同时翻转。”
赵磊凑过去看。
一段藏在内存管理模块最深处的条件判断。ifconcurrent_connections>=1000,执行一个函数。
那个函数做的事情是:把所有共享资源的互斥锁全部置为占用状态。然后让每个线程去等待其他线程释放锁。
没有人会释放。因为所有人都在等。
死循环。
“这段代码谁写的?”赵磊问。
李栋看了眼提交记录。没有提交记录。这段代码不在版本管理里。它是直接写在编译后的二进制文件里的。
硬件指令层面。
赵磊的脸白了。