我想使用Fiber(PHP 8.1)创建一个线程来发送电子邮件(电子邮件发送需要 10 秒,所以我决定使用线程)。这是我的代码
<?php
$fiber = new Fiber(function () {
send_email();
});
$fiber->start();
exit(json_encode(['response' => 1]));
Run Code Online (Sandbox Code Playgroud)
结果send_email()并不重要,但启动光纤后,光纤会等到send_email()完成然后exit(json_encode(['response' => 1]));发生!!!我希望它立即退出,但也发送电子邮件!问题是什么?
在我的 FASM 项目(对象)中,我尝试创建一个跳转表并用于dq每个跳转地址,但有一个问题!
对于每个dq .jmp1(跳转地址定义),.jmp1我的最终 .o 文件的总大小将添加 24 个字节(加上地址的 8 个字节(总共 32 个字节))!
那额外的 24 个字节是什么?有什么办法可以避免吗?这种情况仅发生在目标文件中,而不发生在可执行文件中!
它定义了 32 个字节,而不是每个跳转地址 8 个字节!问题是什么?
format ELF64
section '.text'
func:
lea rax, [8*rax+.jmp_table]
.jmp1:
.jmp_table:
dq .jmp1 ; 8 bytes + 24 bytes !!! (to .o total size)
dq .jmp1 ; 8 bytes + 24 bytes !!! (to .o total size)
Run Code Online (Sandbox Code Playgroud)
但是当我创建一个可执行文件时,每个文件dq只需要 8 个字节(这是我所期望的)......
format ELF64 EXECUTABLE
segment readable executable
func:
lea rax, [8*rax+.jmp_table]
.jmp1:
.jmp_table: …Run Code Online (Sandbox Code Playgroud)