Betflop Asked:2022-04-06 16:43:35 +0000 UTC2022-04-06 16:43:35 +0000 UTC 2022-04-06 16:43:35 +0000 UTC 命名管道和套接字之间的速度差异是多少? 772 我在解释中读到了这句话 命名管道使您能够发送数据而不会降低与网络堆栈相关的性能。 在套接字的情况下,我无法理解“涉及网络堆栈”的含义,即 如果我在同一服务器上的两个进程之间打开了一个套接字,那么数据包无论如何都会通过,比如通过网卡等。? сокет 2 个回答 Voted Best Answer S.H. 2022-04-06T16:51:27Z2022-04-06T16:51:27Z 是的,即使套接字在同一服务器上打开,也会创建支持连接的结构。如数据包计数器、“TCP 窗口”等。 在这种情况下,数据包不会“通过网卡”,但是随着每个对套接字的写入过程,在使用网络套接字时会发生一些工作,并且使用与使用相同的数据结构和内核对象时会发生工作。一个“真正的网络” 使用命名管道时,您只创建大致对应于“文件”的结构,此外,在内存中创建。实际上,命名管道大致对应于它的名称:它是一个“管道”,两个连接的进程都可以在其中写入和读取。 一般来说,网络堆栈是一个非常高性能的东西,而且通常,为了在本地和“网络上”保持代码的一致性,使用网络连接作为通用通信方式是完全可以接受的。 从这个意义上说,FreeBSD 网络堆栈特别受到称赞 - 这与问题无关,而只是一个词:-) nick_n_a 2022-05-05T22:37:37Z2022-05-05T22:37:37Z 你不需要任何额外的东西来让管道工作。管道支持内置在内核中,并且在那里进行了很好的优化。(对于 win-NT 系列,它是 ntdll.dll,对于旧版 win95/98 等,它是 kernel32.dll)。本地管道只是一块愚蠢的内存,您可以在其中读取/写入信息。 在windows中,socket库是独立的,它由两部分组成,一个加载驱动的客户端dll如wsock32.dll(但也有其他的客户端库),以及socket操作在驱动中实现。加载套接字库时 - 我发现一些防病毒软件开始密集检查您的程序是否存在病毒,甚至可以阻止其工作。那些。在打开套接字时 - 客户端已加载。然后加载驱动程序。由于有多种类型的套接字,因此会加载各种过滤器处理程序。读/写访问 - 传递给客户端库。客户端库重新格式化请求并将其发送给驱动程序。并且驱动程序已经在其内部执行操作。因此,允许通过套接字传输 1024 个字节,而通过管道,套接字将花费更多的 CPU 周期,甚至可能多 10 倍,
是的,即使套接字在同一服务器上打开,也会创建支持连接的结构。如数据包计数器、“TCP 窗口”等。
在这种情况下,数据包不会“通过网卡”,但是随着每个对套接字的写入过程,在使用网络套接字时会发生一些工作,并且使用与使用相同的数据结构和内核对象时会发生工作。一个“真正的网络”
使用命名管道时,您只创建大致对应于“文件”的结构,此外,在内存中创建。实际上,命名管道大致对应于它的名称:它是一个“管道”,两个连接的进程都可以在其中写入和读取。
一般来说,网络堆栈是一个非常高性能的东西,而且通常,为了在本地和“网络上”保持代码的一致性,使用网络连接作为通用通信方式是完全可以接受的。
从这个意义上说,FreeBSD 网络堆栈特别受到称赞 - 这与问题无关,而只是一个词:-)
你不需要任何额外的东西来让管道工作。管道支持内置在内核中,并且在那里进行了很好的优化。(对于 win-NT 系列,它是 ntdll.dll,对于旧版 win95/98 等,它是 kernel32.dll)。本地管道只是一块愚蠢的内存,您可以在其中读取/写入信息。
在windows中,socket库是独立的,它由两部分组成,一个加载驱动的客户端dll如wsock32.dll(但也有其他的客户端库),以及socket操作在驱动中实现。加载套接字库时 - 我发现一些防病毒软件开始密集检查您的程序是否存在病毒,甚至可以阻止其工作。那些。在打开套接字时 - 客户端已加载。然后加载驱动程序。由于有多种类型的套接字,因此会加载各种过滤器处理程序。读/写访问 - 传递给客户端库。客户端库重新格式化请求并将其发送给驱动程序。并且驱动程序已经在其内部执行操作。因此,允许通过套接字传输 1024 个字节,而通过管道,套接字将花费更多的 CPU 周期,甚至可能多 10 倍,