什么是chunk?

本文借鉴《自己动手实现Lua:虚拟机、编译器和标准库》,算是对自己学习的总结,也希望分享下所学知识~~

什么叫Chunk?
一段可以被Lua解释器解释执行的代码就叫做chunk
可以很小,小到只有一两条语句;可以很大,大到包含成千上万条语句喝复杂的函数定义

Lua为了提高效率,并不是直接解释执行chunk,先由编译器编译成内部结构(其中包括字节码等信息),再由虚拟机执行字节码

这种内部结构叫做:
**预编译(Precompiled)chunk,由于采用了二进制格式,也叫做二进制(binary)chunk
(预编译并不会加快脚本执行的速度,但是预编译可以加快脚本的加载速度)
(一般不需要关心二进制chunk,因为lua解释器会在内部进行编译)

如何把Lua源文件编译成chunk文件?

print("Hello World");

调用 luac 命令就可以编译指定的 Lua 源文件,成功后会出现 luac.out 文件(里面就是对应的二进制文件)
常用命令如下:

luac hello_world.lua             #单纯的生成
luac -o hw.luac hello_world.lua  #指定名称
luac -s hello_world.lua          #不包含调试信息
luac -p hello_world.lua          #只进行语法检查

Lua编辑器会以函数为单位进行编译,每一个函数都会被Lua编译器编译为一个内部结构

这个结构叫做:原型(Prototype)
主要包含六个部分:
1.函数基本信息(参数数量、局部变量数量)
2.字节码
3.常量表
4.Upvalue表(upValue 是局部变量?)
5.调试信息
6.子函数原型列表(可知函数原型是一种递归结构,lua源码中的函数的嵌套关系会直接反映在编译后的原型里)

如果没有函数,Lua编辑器会自动为脚本生成一i个main函数,并把整个程序都放进这个函数里,再以它为起点进行编译

function main(...)
  print("")
  return
end

把主函数编译成函数原型后,Lua编译器会给它再添加一个头部(Header)
然后一起dump成luac.out文件

如图所示:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当在Spring Batch的Step中设置chunk时,它指定了每次处理的数据项数量。这里有一个简单的例子来说明: 假设你有一个需求是从一个大型的CSV文件中读取数据,对每条数据进行处理,然后将处理后的结果写入数据库。假设这个CSV文件有1000条记录,并且你希望每次处理100条记录。 首先,你需要配置一个Step来执行这个任务,并设置chunk大小为100。具体配置可能如下: ```java @Bean public Step myStep(ItemReader<MyData> reader, ItemProcessor<MyData, ProcessedData> processor, ItemWriter<ProcessedData> writer) { return stepBuilderFactory.get("myStep") .<MyData, ProcessedData>chunk(100) .reader(reader) .processor(processor) .writer(writer) .build(); } ``` 在上述配置中,通过`.chunk(100)`设置了chunk的大小为100。 在Step执行过程中,Spring Batch将从ItemReader读取100条数据作为一个Chunk,然后将这个Chunk传递给ItemProcessor进行处理。ItemProcessor可以对每条数据进行转换、过滤或其他操作。处理后的数据会被传递给ItemWriter进行写入(这里假设是写入数据库)。 然后,Spring Batch会继续读取下一个Chunk,重复以上的处理过程,直到所有数据都被处理完毕。 通过设置chunk大小为100,你可以控制每次处理的数据量,从而在内存和性能之间找到一个平衡点。这样可以避免一次性读取和处理大量数据而导致内存溢出,同时也可以提高处理的效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值