我知道在pthread_self()和syscall(SYS_gettid)之间。pthread_create()生成一个POSIX线程ID,该ID由通常定义为unsigned long int的结构pthread_t表示。我们可以使用pthread_self获取由pthread_create生成的。
使用strace,我知道libpthread.so.0中的pthread_create()是通过调用clone系统调用来实现的,这也是用于fork()的系统调用。在通过调用pthread_create()创建POSIX线程之后,将生成一个新的POSXI线程(由pthread_self()返回的线
Linux上的一个资源提到通过克隆系统调用来实现p线程创建,而其他基于unix的平台(后者以其他方式实现相同)。
这意味着在linux下,使用pthread_create从同一个进程创建的两个线程将具有不同的父进程ids。
$ ./a.out
new thread: pid 6628 tid 1026 (0x402)
main thread: pid 6626 tid 1024 (0x400)
问题
虽然克隆系统调用创建了一个子进程,该进程可以共享父进程执行上下文的可配置量(例如文件描述符和内存),但在我看来,在所有实现中,这可能不是最有效的。在Linux下,对于从pthread_c
我有一个时间关键型应用程序需要按设定的计划发送UDP数据报。在接收端,对抖动的容限非常低。使用java ScheduledThreadPoolExecutor实现这一点是不够的,因为当GC执行"Stop the World“收集时,我的线程会暂停,而GC正在执行它的工作。
我想用Java语言实现业务逻辑,同时在C++中用POSIX线程实现时间关键型部分(顺便说一下,本机环境是Linux )。这将允许我们节省数千行用Java编写的代码,还可以从本机系统调用中获得所需的速度。
我的问题是:如果我调用一个JNI函数来创建一个单独的POSIX线程,当Java GC执行"Stop the