我一直在研究需要多线程支持的编程语言的解析器。在调查我的编译器的后端应该是什么时,我注意到我找不到有关CIR,LLVM IR,gcc RTL或JVM字节码之类的多线程的大量信息。我可以找到关于如何使这样的代码线程安全的一些参考,但没有关于如何创建或分叉线程的任何内容。我当然可以使用信号或其他东西直接与操作系统连接,但这是不可移植的,容易出错。
是不是这种低级语言中没有可移植的方法来管理线程?我应该编译成像C这样的高级(呃)级语言吗?
答案 0 :(得分:2)
在JVM字节代码中,您可以使用任何Java库,包括那些与线程一起使用的Java库。创建线程的传统方法是
new Thread() {
@Override
public void run() {
/// code
}
}.start();
此代码是用Java编写的。使用javap:
可以看到相应的JVM字节代码 0: new #2 // class Main$1
3: dup
4: invokespecial #3 // Method Main$1."<init>":()V
7: invokevirtual #4 // Method Main$1.start:()V
10: return
Main $ 1是一个类:
final class Main$1 extends java/lang/Thread {
// compiled from: Intf.java
OUTERCLASS Main main ([Ljava/lang/String;)V
// access flags 0x8
static INNERCLASS Main$1 null null
// access flags 0x0
<init>()V
L0
LINENUMBER 7 L0
ALOAD 0
INVOKESPECIAL java/lang/Thread.<init> ()V
RETURN
L1
LOCALVARIABLE this LMain$1; L0 L1 0
MAXSTACK = 1
MAXLOCALS = 1
// access flags 0x1
public run()V
L0
LINENUMBER 11 L0
RETURN
L1
LOCALVARIABLE this LMain$1; L0 L1 0
MAXSTACK = 0
MAXLOCALS = 1
}
此代码非常便携。