小编Hel*_*ine的帖子

PHP Fiber 等待完成,但我不想等待

我想使用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]));发生!!!我希望它立即退出,但也发送电子邮件!问题是什么?

php fibers

3
推荐指数
1
解决办法
1051
查看次数

使用每个标签地址,.o 文件的总大小会增加 24 个字节(加上 8 个字节(总共 32 个字节))

在我的 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)

assembly executable x86-64 object-files fasm

0
推荐指数
1
解决办法
94
查看次数

标签 统计

assembly ×1

executable ×1

fasm ×1

fibers ×1

object-files ×1

php ×1

x86-64 ×1