`

windows网络模型学习--WINDOWS和LINUX开发模型比较

阅读更多
windows网络模型学习--WINDOWS和LINUX开发模型比较

以前在做LINUX网络开发时把用户层和系统的内核看成两个层面,看简单点就是用户层才能最简单,高效的取到数据;而内核层就是个终端的对象,可以从终端的被动转向主动。

那么在进行网络I/O操作时有这么几种套路来传递数据:
1。普通的recv,send.首先是用户亲自调用函数进到内核I/O空间查看是否有数据,根据是否有数据做出不同的选择。比如有数据则取回,无数据则等待(阻塞模式下)。这是最原始,也是最理想的取数据状态。在单纯的数据连续传递,并且没有多并发情况下算是很高效的。如果没有什么交互或者高连接要求,用这种普通的写法即可。

2。普通套接字的阻塞和非阻塞时间上的判断要不是有数据,要不就立即返回。有时候需要交互的情况,一些缓冲时间,并且可以对多个套接字的控制。就出现了select/poll.即,在我们调用select时,在指定的时间内,内核会告诉我们是否可读取。

3。select的缺陷就是在套接字多的时候,并且不是每个套接字都在活动状态,耗费在了轮询问的状态上。新的改进即,在有数据时,让内核来通知用户层可以读取了。

4。针对第三的变种有:除了信号通知,还可以为内核直接提供存储空间,顺手把数据给装上;或者再变种点,再挂个回调函数,连收到数据处理后的事也一起干完。

针对第4点,LINUX好象没有分开提供这种变种模式,而是直接把回调的这种模式放在EPOLL里实现了。而WINDOWS则分别提供(linux有没提供可能这里我说得不是特别对)

针对这些模式,来看看WINDOWS

参考帖子:
http://topic.csdn.net/u/20080702/20/43466EA1-0F44-4B07-ACFD-7431A1969C20.html

一:select模型
二:WSAAsyncSelect模型  跟第3点类似,但是在量多的时候内核就很繁忙了。
三:WSAEventSelect模型  在第3点上加以改进,为每个套接字都增加一个线程处理。
四:Overlapped I/O 事件通知模型 相对第4点的变种,顺手把数据给装上。
五:Overlapped I/O 完成例程模型 相对第4点变种,不但数据装上,连函数一起调用了。
六:IOCP模型


讨论到这里,所说的端口模型几乎可以解决所有的I/O状况。比如连接量多和少,数据量的频繁。但是第5点的策略是对每个连接分别建个线程进行处理。一种极端的情况可以这样预料,假设有几万个用户,并且其中活跃数不多。那么就有两个问题需要考虑:这些线程的切换效率?活跃用户的轮询时的命中率?

于是就有了最终模型(从目前来看)Windows:IOCP--Linux:EPOLL

如果事先开好N个线程,让它们在那hold[堵塞],然后可以将所有用户的请求都投递到一个消息队列中去。然后那N个线程逐一从消息队列中去取出消息并加以处理。就可以避免针对每一个用户请求都开线程。不仅减少了线程的资源,也提高了线程的利用率。理论上很不错,你想我等泛泛之辈都能想出来的问题,Microsoft又怎会没有考虑到呢?"-----摘自nonocast的《理解I/O Completion Port》
3
1
分享到:
评论

相关推荐

    xilinx-gcc-arm-linux-gnueabi-201801 WINDOWS下ZYNQ LINUX交叉编译器

    标题中的“xilinx-gcc-...总的来说,Xilinx-gcc-arm-linux-gnueabi-201801是为ZYNQ平台的Linux开发提供的一站式解决方案,涵盖了从源代码到可执行文件的整个流程,使开发者能够在Windows环境中高效地进行跨平台开发。

    prosys-opc-ua-simulation-server-linux-aarch64-5.4.6-148.zip

    其跨平台的特性使得它在Windows、Linux等多种操作系统上都能运行。 该压缩包中的“prosys-opc-ua-simulation-server-linux-aarch64-5.4.6-148.sh”文件是一个可执行的Shell脚本,表明它是为Linux系统设计的安装程序...

    mmdeploy-0.8.0-windows-amd64-cuda10.2-tensorrt8.2.3.0.zip

    mmdeploy-0.8.0-windows-amd64-cuda10.2-tensorrt8.2.3.0.zip是一款由mmlab(多媒体实验室)开发的用于深度学习模型部署的工具包,专为Windows操作系统设计,适用于AMD64架构,并且集成了CUDA 10.2和TensorRT 8.2....

    cudnn-11.1-windows-x64-v8.0.5.39.zip

    总的来说,CuDNN v8.0.5.39 for CUDA 11.1 on Windows 10 64位是一个强大的工具,对于在GPU上运行深度学习模型的研究者和开发者来说,这是一个必不可少的组件。通过有效地利用GPU的并行计算能力,它可以帮助缩短训练...

    onnxruntime-1.8.1-cp39-cp39-linux_armv7l.whl.zip

    - **多平台支持**:虽然这里提供的版本是针对Linux ARMv7l,但ONNX Runtime还支持其他操作系统(如Windows、Linux)和不同的硬件架构(如x86、GPU、Intel MKL-DNN等)。 - **安装与使用**:通过pip工具可以轻松安装...

    socket-windows-and-linux.zip_Linux windows socket_linux c++ sock

    在Windows和Linux中,Socket API遵循Berkeley Sockets模型,也称为伯克利套接字,它源于Unix系统,并已被广泛采纳。尽管两者的基本API相似,但具体的实现和系统调用可能有所不同。 在Linux中,Socket编程通常涉及`#...

    cudnn-8.0-windows10-x64-v5.0-ga

    CUDA(Compute Unified Device Architecture)是一种并行计算平台和编程模型,它允许开发人员利用NVIDIA GPU的强大性能来加速计算密集型任务。 CuDNN(Convolutional Neural Network Library)是CUDA的库,专门针对...

    apache-maven-3.5.4-bin-windows+linux版本合集

    在本资源包中,包含了适用于Windows和Linux操作系统的Apache Maven 3.5.4版本。 【标题】:“apache-maven-3.5.4-bin-windows+linux版本合集” 提供了两个不同操作系统下的二进制安装包。这使得无论是在Windows还是...

    cudnn-11.2-windows-x64-v8.1.0.77.zip

    CUDNN提供了对卷积神经网络(CNNs)、循环神经网络(RNNs)、全连接网络(FCNs)等常用深度学习模型的高效实现,通过利用GPU的强大并行计算能力,极大地提高了训练和推理的速度。 **CUDNN与CUDA的关系** CUDA是...

    cudnn-windows-x86-64-8.9.3.28-cuda12-archive

    CuDNN(CUDA Deep Neural Network)是NVIDIA公司开发的一个加速深度神经网络计算的库,它充分利用了GPU的并行计算能力,为训练和部署深度学习模型提供了高效的工具。 描述中的"cuda12"强调了这个CuDNN版本是专门为...

    大模型应用-使用C#开发的ChatGPT客户端-client-支持MacOS+Windows+Linux+Android+iOS

    大模型应用_使用C#开发的ChatGPT客户端_client_支持MacOS+Windows+Linux+Android+iOS+Brower多平台_优质大模型应用项目实战

    cudnn-11.4-windows-x64-v8.2.2.26.zip

    CuDNN(Convolutional Neural Network Library)是NVIDIA开发的一个用于加速深度神经网络计算的库,它与GPU硬件紧密集成,以提供高性能的卷积神经网络(CNN)、递归神经网络(RNN)和长短期记忆网络(LSTM)等计算...

    cudnn-11.2-windows-x64-v8.1.1.33.zip

    1. **性能提升**:与前一版本相比,该版本在多种深度学习算法上进行了性能优化,尤其是在卷积神经网络(CNN)的前向和反向传播过程中。 2. **新功能支持**:可能包含了对新模型架构或训练技巧的支持,如Transformer...

    cudnn-11.3-windows-x64-v8.2.0.53.zip

    CuDNN全称为CUDA Deep Neural Network,是由NVIDIA开发的深度学习库,用于加速基于GPU的深度神经网络(DNN)的计算。这个版本是针对CUDA工具包11.3设计的。 描述中的信息与标题相同,进一步确认了这是一个与CuDNN...

    VxWorks,RT-Linux以及Windows CE实时系统比较

    Windows CE是Microsoft针对嵌入式市场开发的系统,它基于Windows NT内核,拥有与桌面版Windows相似的API和编程模型,使得开发者能够轻松迁移现有的Windows应用。Windows CE支持丰富的图形用户界面(GUI)和网络功能...

    cudnn-windows-x86-64-9.0.0.312-cuda12-archive.zip

    CuDNN是NVIDIA公司为加速深度神经网络(DNNs)计算而开发的一套库,它提供了高度优化的GPU内核,用于执行常见的DNN操作,如卷积、池化、激活、归一化和反向传播等。 描述中提到,这个安装包是专为Windows操作系统...

    ONNXRuntime部署PaddleSeg实时人像抠图模型PP-MattingV2包含C++和Python源码+模型.zip

    1. **跨平台**:ONNXRuntime支持多种操作系统,包括Windows、Linux和macOS,以及各种硬件平台,如CPU、GPU和AI加速器。 2. **高效**:ONNXRuntime经过优化,能充分利用硬件资源,提供高效的推理性能。 3. **易用**:...

    跨平台的socket库,windows-linux-socket

    总之,“跨平台的socket库,windows-linux-socket”是一个旨在消除操作系统差异的工具,它通过抽象和封装Socket编程的具体细节,使得开发者能够编写出可在Windows和Linux上运行的网络应用程序。通过理解和使用这类库...

    Windows_linux-Socket.rar_Windows Linux_linux Windows _socket_win

    标题中的“Windows_linux-Socket.rar”表明这是一个关于Windows和Linux平台间使用Socket进行通信的资源...通过学习和分析这些源码,可以深入理解跨平台Socket编程的实现细节和技巧,为开发跨平台网络应用打下坚实基础。

    cudnn-10.0-windows10-x64-v7.4.1.5

    总的来说,CUDNN 7.4.1.5是深度学习开发者在Windows 10环境下使用CUDA 10.0进行GPU加速的必备组件,它提供了高效的底层计算支持,显著提高了神经网络的运行速度,使得复杂的深度学习模型能在有限的硬件资源下得以...

Global site tag (gtag.js) - Google Analytics