包含标签 lua articles

skynet伪并发

一、背景

和 erlang 不同,一个 skynet 服务在某个业务流程被挂起后,即使回应消息尚未收到,它还是可以处理其他的消息的。所以同一个 skynet 服务可以同时拥有多条业务执行线。所以,你尽可以让同一个 skynet 服务处理很多消息,它们会看起来并行,和真正分拆到不同的服务中处理的区别是,这些处理流程永远不会真正的并行,它们只是在轮流工作。一段业务会一直运行到下一个 IO 阻塞点,然后切换到下一段逻辑。你可以利用这一点,让多条业务线在处理时共享同一组数据,这些数据在同一个 lua 虚拟机下时,读写起来都比通过消息交换要廉价的多。

……

Continue reading

skynet火焰图

一、背景

前面腾讯云mongo服务采坑优化Mongo降CPU两篇文章从两个角度记录了我们解决水晶活动异常所用到的方式。但这些都是外部的,真正是否机器不够用、数据库拖慢服务还是其它问题还是得从代码层面入手。从数据库入库记录和请求日志已经很清晰就是水晶抽卡导致负载上升服务异常的,所以直接压测接口找到代码层面问题是最首先应该做的事,而火焰图就是最好的工具。

……

Continue reading