skynet skynet.error()的一个小坑

今天调试代码的时候,遇到了一个小坑,打印的输出信息一致不对,困扰了一天各种想不明白,后来还是通过另一个方式算是解决了这个问题,也算是skynet.errro()的一个小坑吧。对于我这种新手skynet学习者来说。下面直接上代码

首先我测试的是 skynet.pack()、skynet.unpack、skynet.trash()这三个函数。我在C层分别加了打印。测试调用情况,以及内存释放问题
skynet skynet.error()的一个小坑_第1张图片skynet skynet.error()的一个小坑_第2张图片skynet skynet.error()的一个小坑_第3张图片分别加了打印,重新编译

那直接上测试代码

skynet.start(function ( ... )
	skynet.error("first skynet service",skynet.address(skynet.self()))

	skynet.error(skynet.self())
	skynet.error("-----------------------")
	local msg,sz = skynet.pack("lpl",28)
	skynet.error("-----------------------")
	local name,age = skynet.unpack(msg,sz)
	skynet.error(name,age)
	
	skynet.trash(msg,sz)
	skynet.error("-----------------------")
	
end)

按照单线程的逻辑来说 打印顺序应该是

我觉得是:

first skynet service :0100000a
16777226
-----------------------
luaseri_pack....
-----------------------
luaseri_unpack....
lpl 28
ltrash.....
-----------------------

然而却出乎意料
skynet skynet.error()的一个小坑_第4张图片顺序有点混乱,有点想不明白,整了一天,后来换了一种方式打印,直接把skynet.error换成print
打印如下

skynet.start(function ( ... )
	print("first skynet service",skynet.address(skynet.self()))

	print(skynet.self())
	print("-----------------------")
	local msg,sz = skynet.pack("lpl",28)
	print("-----------------------")
	local name,age = skynet.unpack(msg,sz)
	print(name,age)
	
	skynet.trash(msg,sz)
	print("-----------------------")
	
end)

skynet skynet.error()的一个小坑_第5张图片
这下逻辑就清晰多了,看来skynet.error估计是个异步的过程,暂未研究c底层,等lua层弄明白了,再去解决这些原理问题吧

你可能感兴趣的:(skynet框架分析)