Articles of asynchronous

如何从asynchronous套接字连接报告错误?

我asynchronous连接套接字(O_NONBLOCK +连接)。 POSIX标准规定,在套接字连接之后,应该通过使套接字的文件描述符准备好写入来发信号通知事件。 在asynchronous连接过程中似乎没有提到任何有关失败的信息。 在Linux上进行testing时,似乎有时会出现POLLOUT,有时甚至是POLLERR。 行为中是否有任何模式? 我能否以单一方式报告错误? POSIX说了一些我忽略的东西吗?

LinuxasynchronousIO的状态?

我在这里问,因为谷歌search导致你在一个快乐的旅行周围的档案,而不是暗示目前的状态是什么。 如果你经过谷歌,看起来asynchronousIO在2001年到2003年是风靡一时的,而到了2006年,一些像epoll和libaio这样的东西也出现了。 kevent出现了,但似乎已经消失了,而且据我所知,仍然没有好的方法来混合基于完成的和基于就绪的信号,asynchronous发送文件 – 甚至可能吗? – 以及单线程事件循环中的所有其他内容。 所以请告诉我,我错了,这一切都是美好的! – 重要的是,使用什么API。 Linux在这方面如何与FreeBSD和其他操作系统比较?

Linux,套接字,非阻塞连接

我想创build一个非阻塞连接。 喜欢这个: socket.connect(); // returns immediately 为此,我使用另一个线程,一个无限循环和Linux epoll。 像这样(伪代码): // in another thread { create_non_block_socket(); connect(); epoll_create(); epoll_ctl(); // subscribe socket to all events while (true) { epoll_wait(); // wait a small time(~100 ms) check_socket(); // check on EPOLLOUT event } } 如果我运行一个服务器,然后运行一个客户端,所有的工作。 如果我第一次运行一个客户端,等待一段时间,运行一个服务器,然后客户端不连接。 我究竟做错了什么? 也许它可以做不同?

Linux Asynch IO – aio.h和libaio.h之间的区别

我已经开始寻找一种我不知道在Linux中称为asynchronousIO的新范例。 我的目标是使用asynchronousIO定位套接字来编写高性能高效的服务器。 原因是我的应用程序是IO绑定的。 在search更多的信息时,我遇到以下两个介绍。 Posix AIO Linux AIO接口 在asynchronous框架中,我想避免的情况是为每个需要asynchronous处理的通知创build一个新的线程,因为它会终止我的应用程序。 我的问题如下: 这两个框架的幕后是否可以解决这个问题呢? 如果是的话,你会build议在sockets上有什么? 问候 AFG

如何实现一个实际的光纤调度器?

我知道关于使用协程作为基础和实现玩具调度程序的基本知识。 但是我认为这是对整个asynchronous调度程序的简单看法。 我的思想中缺less一整套洞。 如何保持CPU运行闲置/等待的调度程序? 有些光纤正在睡眠,有些则等待操作系统的input。

用非IO事件中断epoll_wait,没有信号

当前的情况是epoll_wait在几个fds和一个可能的传入消息队列,我想epoll_wait下面的循环执行IO事件或新消息。 我知道的方法: 使用time毫秒超时,并在循环中检查队列的第一件事 消息可用时,使用队列代码中的自我pipe道技巧 用标准信号中断系统调用 使用epoll_pwait并细化前一点 上面提到的要点都不足以满足我的要求,我想知道是否还有其他的方法,我没有find。 原因是: 信号是multithreading代码要避免的,并不是很可靠 超时可以消除epoll的一部分好处,只能用事件唤醒 自我pipe理技巧目前看起来是最好的方法,但仍然过多的样板 想法?

如何在单个事件循环中一起使用AIO和epoll?

如何将AIO和epoll结合在一个事件循环中? 谷歌在2002年和2003年之间发现了很多关于统一它们的话题,但是如果发生了什么事情,或者如果可能的话,它都不清楚。 有没有人滚动他们自己的epoll循环使用eventfd的AIO信号?

缓冲在Linux上的asynchronous文件I / O

我正在寻找在Linux上执行asynchronous文件I / O的最有效方法。 POSIX glibc实现使用userland中的线程。 本地aio内核API只适用于没有缓冲的操作,为内核添加对缓冲操作的支持的补丁存在,但是那些大于3岁,似乎没有人关心将它们集成到主线。 我发现了很多其他的想法,概念,补丁,可以允许asynchronousI / O,尽pipe其中大部分都是3年以上的文章。 这些在今天的内核中真的有用吗? 我已经阅读了关于servlet,acalls,内核线程的东西以及更多我现在甚至不记得的东西。 什么是在今天的内核做缓冲asynchronous文件input/输出的最有效的方法是什么?

事件驱动和asynchronous之间有什么区别? 在epoll和AIO之间?

事件驱动和asynchronous通常被用作同义词。 两者有什么分别吗? 另外, epoll和aio什么区别? 他们如何融合在一起? 最后,我读过很多次,Linux下的AIO是可怕的。 究竟是如何破碎? 谢谢。

Linux上真的没有asynchronous块I / O吗?

考虑一个CPU绑定的应用程序,但也有高性能的I / O要求。 我将Linux文件I / O与Windows比较,我看不出epoll会如何帮助Linux程序。 内核会告诉我文件描述符是“准备好读取”的,但是我仍然需要调用阻塞read()来获取我的数据,如果我想读取兆字节,那么很明显,这将阻塞。 在Windows上,我可以使用OVERLAPPED集创build一个文件句柄,然后使用非阻塞I / O,并在I / O完成时得到通知,并使用该完成函数中的数据。 我不需要在应用程序级的挂钟时间等待数据,这意味着我可以精确地调整我的线程数量到我的核心数量,并获得100%的CPU利用率。 如果我必须在Linux上模拟asynchronousI / O,那么我必须分配一定数量的线程来完成这个任务,而这些线程将花费一点时间来处理CPU的事情,并且很多时间阻塞I / O,加上这些线程的消息传递会有开销。 因此,我将要么过度订阅,要么没有充分利用我的CPU核心。 我将mmap()+ madvise()(WILLNEED)看作是一个“穷人的asynchronousI / O”,但它仍然不能完全实现,因为在完成时我无法得到通知 – 到“猜测”,如果我猜“错误”,我将最终阻止内存访问,等待数据来自磁盘。 Linux似乎在io_submit中启动了asynchronousI / O,似乎也有一个用户空间的POSIX aio实现,但是一段时间就这样,我知道没有人会为这些系统担保,高性能的应用程序。 Windows模型大致如下所示: 发出asynchronous操作。 将asynchronous操作绑定到特定的I / O完成端口。 等待操作在该端口上完成 当I / O完成时,等待在端口上的线程解除阻塞,并返回对未决I / O操作的引用。 步骤1/2通常作为一件事完成。 步骤3/4通常使用工作线程池来完成,而不是与发出I / O的线程相同的线程。 这个模型有点类似于boost :: asio提供的模型,除了boost :: asio实际上并没有给你asynchronous的基于块(磁盘)的I / O。 与Linux中的epoll不同的是,在步骤4中,没有I / O还没有发生 – […]