问题标签 [iocp]

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.

0 投票
2 回答
2856 浏览

threadpool - 自定义线程池中的 IOCP

我目前正在互联网上搜索自定义线程池实现。我找到了一个使用 IOCP 的实现。我想知道使用它们有什么好处?他们是否提供工作窃取或类似的东西,我真的可以找到答案......

0 投票
3 回答
2102 浏览

c++ - IOCP,跨平台库?

我最近在 windows 平台上遇到了一个叫做 IOCP 的东西,更准确地说:输入/输出控制端口。当服务器软件需要同时容纳数千名用户时,这似乎是编写服务器软件的最有效方式。(如果我错了,请纠正我,但是每个套接字的线程、轮询和异步回调(每个回调上的线程)都不够有效。)

我想知道是否有任何 3rd 方库可以实现这个概念。我知道 win32 api 为我们提供了 CreateIoCompletionPort,FreeBSD 有 kqueue,而 linux 通常可以使用 /dev/epoll,它们的工作方式有点相似......但是没有一个跨平台库(比如 boost::thread)来处理这些东西为了我?

0 投票
2 回答
1419 浏览

c# - Mono 和 C# IOCP:这是个好主意吗?

我正在将一个 c++ 应用程序移植到在其服务器上使用 IOCP 的 c#。

单声道可以像处理窗口一样处理 IOCP 吗?我会获得与 c++ 相当的性能还是我应该尝试其他方法?

谢谢

0 投票
1 回答
2210 浏览

windows - 通过 IOCP 进行串行通信

是否可以将 IO 完成端口用于串行 I/O?根据 Windows 通过 C/C++ 暗示这是可能的,并且确实给出了一个使用 IOCP 和物理文件的示例,显示与 CreateFile、ReadFile、WriteFile 等一起使用。但是这实际上可以与串行通信一起使用吗?它工作吗?

我在网上找不到任何这样的例子,但我不能成为第一个尝试它的人吗?

0 投票
4 回答
1639 浏览

iocp - I/O 完成端口,如何释放每个套接字上下文和每个 I/O 上下文?

我在 UDP 套接字上使用 IOCP,UDP 套接字可能在另一个线程中关闭。那么,如何安全地释放与 SOCKET 关联的 Per Socket Context 和 Per I/O Context 呢?

当我关闭套接字时,内核队列中仍然会有未完成的 I/O 请求。

如果我在套接字关闭时释放上下文,则 GetQueueCompletionStatus 可能会失败。

现在,我的问题是何时释放上下文?

0 投票
2 回答
447 浏览

multithreading - 关于 IOCP 的问题

如果我想使用完成端口从不同的线程获取信息,

我该如何设计程序的结构?下面的那个怎么样?

如果我想使用全局函数,如何设置互斥锁?

0 投票
1 回答
925 浏览

c++ - 关于windows iocp的一个问题

当我在 Windows Vista 中编写有关 IO 完成端口的程序时,第一个示例不起作用,GetQueuedCompletionStatus() 无法获取任何 OVERLAPPED 结构。

所以我把 OVERLAPPED 结构放在全局范围内,它的效果非常好。这是为什么?

代码1:

代码2:

0 投票
4 回答
692 浏览

c++ - 这个程序是异步运行还是同步运行?

当我运行这个程序

似乎 WriteFile 直到写入工作完成才返回。同时,调用 GetQueuedCompletionStatus()。该行为类似于同步 IO 操作,而不是异步 IO 操作。

这是为什么?

0 投票
1 回答
3044 浏览

windows - 重叠 I/O:如何在完成端口事件或正常事件上唤醒线程?

我想使用线程池来启动/取消重叠的读取操作——分别使用ReadFile()CancelIo()——以及在读取操作完成时处理任何完成端口事件。

  1. 任何线程都可以发起读操作
  2. 任何线程都可以处理读取完成事件
  3. 只有发起读取的线程可以取消它(这是一个CancelIo()限制)

我不确定如何实现这一点。通常调用GetQueuedCompletionStatus()等待完成端口事件和WaitForSingleObject()等待正常事件,但不清楚如何混合两者。如果PostQueuedCompletionStatus()让我指定要唤醒的特定线程,我会被设置。有任何想法吗?

更新:该解决方案必须在 Windows XP 上运行。不幸的是,这排除了使用CancelIoEx()or GetQueuedCompletionStatusEx()

0 投票
3 回答
2566 浏览

delphi - 使用winsock2和IOCP替换Delphi TClientSocket?

有这样的事吗?它需要是异步的(没有 Indy)。