问题标签 [io-completion-ports]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - IOCP WSARecv 总是返回错误 10022
我在 Windows 上使用 IOCP。以前我使用方法GetQueuedCompletionStatus
来轮询队列,一切都很好。但是当我决定重构逻辑以使用完成例程WSARecv
调用时,它总是失败并出现错误WSAEINVAL
(10022)。此代码在创建的线程中CreateTread
并且工作例程是空的并且具有以下定义:
当我传递NULL
而不是传递WorkerRoutine
给 WSARecv 方法时,一切正常。但是当我将完成例程传递给调用时,它失败并出现错误 10022。我尝试使用WorkerRoutine
但&WorkerRoutine
没有任何帮助。
该hEvent
属性在 OVERLAPPED_EX 对象中设置为 NULL。
windows - 如果前面没有 `WSARead`,`WSASend` 永远不会触发完成例程
我正在开发管理 req/res 主题并扇出一些消息的服务器客户端应用程序。WSASend
使用提供的完成例程以重叠模式发送消息。注意到在触发发送者的完成例程WSASend
之后的下一个发送。WSARead
虽然在没有前面的服务器中发起的发送WSARead
不会触发完成例程。为什么会这样?
以下是完成例程:
变量created
并显示了创建并释放deleted
了多少结构以避免内存泄漏。OVERLAPPED_EX
linux - 没有 IO 完成端口的 Linux 上的 .NET Core 中的异步如何工作?
据我了解,Linux 没有IO Completion Ports。
这可能就是为什么在 Scala (JVM) 中开发人员应该明确通知API 有关阻塞操作的原因。
但是,Task Parallel Library 似乎并没有用这些细节打扰开发人员。一切都是开箱即用的。
但是,在 Linux 上的 Mono/NetCore 的情况下,如何避免线程饥饿呢?
windows - IOCP 读取文件的竞争条件
我正在尝试使用IOCP
异步文件读取。
这在 99% 的情况下都可以正常工作。但有 1% 的时间请求似乎永远不会完成,因此操作只会永远等待。
挂起的文件的 API 调用顺序是
即使一次读取一个文件,这似乎也会发生,我不知道为什么。我最初认为包含该LPOVERLAPPED_ENTRY
结构的指针可能会变得无效,但检查位置gdb
显示它仍然很好。
有谁知道会发生什么?
winapi - I/O 完成端口出列顺序
来自https://docs.microsoft.com/en-us/windows/desktop/fileio/io-completion-ports:
请注意,虽然数据包按 FIFO 顺序排队,但它们可能会以不同的顺序出队。
即使在单个排队线程和单个 dequeing 线程的情况下,这是否也不能保证?
在什么情况下数据包可以以不同的顺序出列是否有任何进一步的信息?
c++ - 在命名管道中使用 windows 完成端口
我需要在进程之间传输数据,我有一个本地服务器进程和多个客户端进程,它们可能同时发送数据和接收数据。我创建了命名管道并CreateIoCompletionPort
在服务器中。而当客户端CreateFile
,GetQueuedCompletionStatus
将返回这是我所期望的,但是,当客户端写入文件时,服务器无法获取完成端口包,我希望在客户端到来时通知服务器,并发送消息,我该怎么办?
我对可以通知完成端口的功能有所了解,PostQueuedCompletionStatus
但我无法在客户端进程中获取完成端口句柄,谁能告诉我常见的实现,谢谢!
c# - _ThreadPoolWaitCallback.PerformWaitCallback 和 _IOCompletionCallback.PerformIOCompletionCallback 之间的区别
我试图了解 iocp 和 io 完成线程池。据我所知,IO 像 http 请求一样通过 iocp 和 io 完成线程来执行回调代码。但我发现文件读取、Http 请求和 SQL 查询之间存在一些差异。
输出:
输出显示,只有 http 请求使用 ioThread 执行回调,为什么?文件和sql使用ioThread insdie框架代码,然后将用户代码回调入队到workthreadpool?
而且我测试了很多次,new FileStream(..)
总是拿一个ioThread,这是怎么回事?
.net - 线程使用量增加——找到需求在哪里
我有一个 Windows wcf Web 应用程序,在服务端,我们创建有状态会话。当会话数超过某个阈值时,新请求会在 .net 级别排队。我们认为这是因为一些 .net 错误,当对 .net 默认线程池线程的需求突然激增时,.net 无法足够快地发出线程。因此,新请求将排队,直到 .net 从挂起中恢复并发出 thradpool 线程以接受传入请求。
我们正试图弄清楚对线程的突然需求来自何处。当线程数开始增加时,我转储了 w3wp 进程。
我在 windbg 中运行了!uniqstack
命令,我注意到下面的堆栈常见于近 400 个线程。这个堆栈是什么意思?这一切都在等待一些 IO 完成吗?这 400 个线程是 IO Completion Port 线程吗?
但是按照以下命令,IO Completion 端口线程的数量很少。
c++ - 如何为 I/O 完成端口添加额外的线程
我正在根据 Winsock IO Completion Port 设置服务器。我对后台发生的事情有点不确定,希望我能在这里得到一些帮助。
当我调用 GetQueuedCompletionStatus() 时,它会阻塞,直到“后台任务”完成。鉴于它最终被解除阻塞并继续,我的理解是后台线程必须在主程序被阻塞时处理了任务。
鉴于我没有手动创建线程(CreateThread),我想知道当我调用 CreateIoCompletionPort() 时这是否会自动发生
windows - 如何将 Windows IO 完成端口 HANDLE 转换为 GLib 的 GPollFD 以用于自定义 GSource?
我处于非常不幸的位置,需要在所有三个主要操作系统上连接 nodejs 的 libuv 和 GLib 的 MainLoop。我需要将 libuv 的主循环和 GLib 的主循环交错,这样项目的两个部分才能快乐地生活在一起。在 unix 上,这很容易,因为 libuv 返回一个文件描述符来轮询:
然而,在 Windows 上,没有可供轮询的文件描述符。可用的是 uv 下的 IO Completion Port HANDLE loop->iocp
。我不确定如何从这里开始。我在想我可能应该使用 GLIB 中的以下函数:
但是我需要从中创建一个GPollFD
,我不知道该怎么做,或者它是否是正确的选择。欢迎任何可以帮助我进步的提示。
相关链接:https ://github.com/romgrk/node-gtk/blob/master/src/loop.cc#L68-L75