其他操作系统是否实现Linux系统调用拼接?

2024-01-09

在我正在开发的应用程序中我使用splice http://en.wikipedia.org/wiki/Splice_%28system_call%29在 Linux 上用于套接字到套接字的数据传输。

  1. 其他操作系统(特别是至少 Windows、OS X 和 FreeBSD)是否实现splice或等效的解决方案?
  2. 是否可以模拟套接字到套接字的数据splice在 Windows 上使用sendfile¹ + memmap¹?

¹ 两者都以不同的名称存在于 Windows 上,我不记得了。


Update

你可以看到性能的提升splice与 Linux 上的用户空间缓冲区相比。

  • DF, DR, F, MF, MR我的应用程序有不同的隧道模式,NX是 NGINX 网络服务器
  • -p+t使用Linux系统调用splice
  • +p-t使用带有用户空间缓冲区的可移植实现
  • +p+t使用具有用户空间缓冲区和多个操作系统线程的可移植实现
  • 条形代表吞吐量gigaBYTE秒每秒
  • 4 个并发客户端请求 4 次单个 1 GB(1048576000 字节)文件

传输文件 http://msdn.microsoft.com/en-us/library/windows/desktop/ms740565%28v=vs.85%29.aspx我想到了winsock中从一个文件句柄流式传输到套接字的一种方式,但我不确定这是否会对您有所帮助,因为它是从文件->磁盘流式传输。您也许可以将它与内存映射文件 http://msdn.microsoft.com/en-us/library/windows/desktop/ms684212%28v=vs.85%29.aspx handle.

我过去听过一些人谈论“内核模式”作为加速某些回显和简单服务器操作的方法,但我从未这样做过。

关于内核模式winsock的一些链接:

http://blogs.msdn.com/b/wndp/archive/2006/02/24/introduction-to-winsock-kernel-wsk.aspx http://blogs.msdn.com/b/wndp/archive/2006/02/24/introduction-to-winsock-kernel-wsk.aspx

http://msdn.microsoft.com/en-us/library/windows/hardware/ff571084(v=vs.85).aspx http://msdn.microsoft.com/en-us/library/windows/hardware/ff571084(v=vs.85).aspx

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

其他操作系统是否实现Linux系统调用拼接? 的相关文章

  • 检查 Linux 中给定进程的打开 FD 限制

    我最近有一个 Linux 进程 泄露 了文件描述符 它打开了文件描述符 但没有正确关闭其中一些文件描述符 如果我对此进行监控 我就可以提前得知该过程已达到其极限 有没有一种很好的 Bash 或 Python 方法来检查 Ubuntu Lin
  • C 文件 I/O 操作如何在底层处理?

    扩展标题 我想知道操作系统如何处理 fwrite fread fopen 和 fclose 等函数 实际上什么是流 抱歉 如果我不够清楚 顺便说一句 我正在使用 GNU Linux Ubuntu 11 04 对我想问的问题有更好的解释 我想
  • Python:监听两个端口

    import socket backlog 1 Number of queues sk 1 socket socket socket AF INET socket SOCK STREAM sk 2 socket socket socket
  • 以 C 语言编程设置 MTU

    客户端请求 MTU 限制为 1492 有没有办法在源代码 C 程序 中做到这一点 一般情况下还有其他方法吗 如果配置 为什么有人需要将 MTU 修改到一定的限制 有什么好处 而最 重要提示 更改 MTU 是否存在破解代码的风险 使用C编程方
  • socketcan如何处理仲裁?

    我非常了解 CAN 协议的工作原理 当两个节点尝试同时使用网络时 较低 id 的 CAN 帧会获得优先级 而另一个节点会检测到这一点并停止 当使用 socketcan 时 这似乎被抽象化了 我们只需像任何文件描述符一样写入和读取 我可能误解
  • 为什么我的信号处理程序只执行一次?

    我正在 UNIX 和 C 中处理信号 并遇到了这个问题 我正在尝试编写一个计数到 10 的程序 每秒一个数字 当用户尝试使用 SIGINT 如 CTRL C 中断它时 它会打印一条消息 告诉它无论如何都会继续计数 到目前为止 我得到了这个
  • 无法连接到非阻塞套接字

    这让我抓狂 我必须在 php 5 3 中创建一个非常简单的非阻塞套接字脚本 其中客户端连接到服务器 两者都使用非阻塞套接字 我试过了phpsocket守护进程 http code google com p phpsocketdaemon 和
  • C# 套接字数据报溢出

    我是 C 新手 我有一个关于udp套接字的小问题 我有一个聊天服务器 它接收特定结构的数据包 udp 数据报 为什么程序在套接字缓冲区已满时才接收数据 难道以后的一切就不应该失去吗 也许会出现数据包碎片 数据包结构 udp headers
  • 是什么决定了 getdents 返回目录条目的顺序?

    背景是我有一个现有的应用程序 其中列出了目录条目 strace 显示它只是调用 getdents 并按返回的顺序列出它们 我希望它们以与不带参数调用 ls 相同的顺序显示 是否可以通过某种方式更新目录数据来实现此目的 FS 是 ext4 如
  • 如何在 Java 中通过 TLS v.1.2 创建安全的 TCP 连接

    我想通过 TLS v1 2 在两个系统之间创建通信 其中包含的信息是保密的 我想避免 https Web 服务调用 而直接想在 TCP 层执行消息交换 您能否建议如何实现此功能 以便我可以通过 TLS v1 2 安全地传输数据 EDIT 阅
  • crt0 是否加载 msvcrt.dll?

    我想弄清楚标准 C 函数是什么样的printf 在 Windows 环境下加载到内存中 我知道crt0 obj准备堆栈 调用int main int argc char argv 然后使用 main 返回的退出代码退出进程 我还听说 C 标
  • 如何将 boost::asio 套接字转换为 C++/CLI .Net 套接字?

    我想要的是简单的 从 boost asio 套接字创建新的 C CLI Net 套接字的代码示例 如何创建这样的东西 这是我想做的伪代码 net socket a boost asio socket b a assign b nativeW
  • 保持 WebSocket 连接处于活动状态

    我正在研究 WebSocket 协议 并尝试在后端使用 Python 实现一个简单的 ECHO 服务 它似乎工作正常 但连接建立后立即断开 这是我的客户
  • 操作系统和元操作系统有什么区别

    最近听到这个词元操作系统当我学习ros时 你能帮我区分一下吗操作系统 and 元操作系统 ROS 是什么和不是什么最好的解释是这张纸 http www robotics stanford edu ang papers icraoss09 R
  • (nasm x86实模式)如何在引导加载的扇区中写入/读取字符串?

    我正在使用 NASM 为 x86 实模式编写一个最小操作系统 用于教育目的 我想使用 512 字节引导扇区加载包含操作系统其余部分的更大扇区 我已经成功创建了一个加载另一个扇区的引导扇区 但我似乎无法在加载的扇区中写入 读取字符串 这是我的
  • 将一个整数从 C 客户端发送到 Java 服务器

    我使用此代码将一个整数从我的 Java 客户端发送到我的 Java 服务器 int n rand nextInt 50 1 DataOutputStream dos new DataOutputStream socket getOutput
  • vmsplice() 和 TCP

    在原来的vmsplice 执行 有人建议 http lwn net Articles 181169 如果您的用户态缓冲区是管道中可容纳的最大页面数的 2 倍 则缓冲区后半部分成功的 vmsplice 将保证内核使用缓冲区的前半部分完成 但事
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置
  • C++ Socket选择和接收问题

    下面是我在套接字编程方面遇到问题的代码片段 在此之后select调用 如果我不在第 9 行放置睡眠 则在 Windows XP 上 第 11 行收到 1 个字节 而不是从服务器作为整数发送 4 个字节 当我检查 xmlSize 时 它 被设
  • 无法理解Peterson算法的正确性

    我在这里讨论彼得森算法的一个场景 flag 0 0 flag 1 0 turn P0 flag 0 1 turn 1 while flag 1 1 turn 1 busy wait

随机推荐