gpt4 book ai didi

multithreading - AIO 可以在不创建线程的情况下运行吗?

转载 作者:行者123 更新时间:2023-12-03 13:05:21 27 4
gpt4 key购买 nike

我希望 aio 在读取操作完成时向我的程序发出信号,并根据 this page ,这样的通知可以通过内核发送的信号接收,也可以通过启动运行用户函数的线程来接收。可以通过设置 sigev_notify 的正确值来选择任一行为.

我试了一下,很快发现即使设置为通过信号接收通知,也会创建另一个线程。

(gdb) info threads
Id Target Id Frame
2 Thread 0x7ffff7ff9700 (LWP 6347) "xnotify" 0x00007ffff7147e50 in gettimeofday () from /lib64/libc.so.6
* 1 Thread 0x7ffff7fc3720 (LWP 6344) "xnotify" 0x0000000000401834 in update (this=0x7fffffffdc00)

该文档还指出:这些功能的实现可以使用内核中的支持(如果可用)或使用基于用户级线程的实现来完成。
我想根本没有线程,这可能吗?

我检查了我的内核,看起来没问题:
qdii@localhost /home/qdii $ grep -i aio /usr/src/linux/.config
CONFIG_AIO=y

是否可以在没有任何(用户态)线程的情况下运行 aio(当然,除了主线程)?

编辑 :
我深入研究了它。 librt 似乎提供了 aio 函数的集合:查看 glibc 源代码暴露了一些可疑的东西:在/rt/aio_read.c 内部是一个函数 stub :
int aio_read (struct aiocb *aiocbp)
{
__set_errno (ENOSYS);
return -1;
}

stub_warning (aio_read)

我在子目录 sysdeps/pthread 中找到了第一个相关的实现,它直接调用了 __aio_enqueue_request(..., LIO_READ) ,这反过来又创建了 pthreads。但是当我想知道为什么在这种情况下会有一个 stub 时,我想也许 stub 可以由 linux 内核本身实现,并且 pthread 实现将是某种后备代码。

贪吃 aio_read通过我的/usr/src/linux 目录给出了很多结果,我现在正试图理解这些结果。

最佳答案

我发现实际上有两个完全不同的aio库:一个是 的一部分glibc ,包含在 librt 中,并使用 pthreads 执行异步访问。另一个 aio 库实现与第一个相同的接口(interface),但建立在 linux 内核本身之上,并且可以使用信号异步运行。

关于multithreading - AIO 可以在不创建线程的情况下运行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9448404/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com