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》
分享到:
相关推荐
其跨平台的特性使得它在Windows、Linux等多种操作系统上都能运行。 该压缩包中的“prosys-opc-ua-simulation-server-linux-aarch64-5.4.6-148.sh”文件是一个可执行的Shell脚本,表明它是为Linux系统设计的安装程序...
标题中的“xilinx-gcc-...总的来说,Xilinx-gcc-arm-linux-gnueabi-201801是为ZYNQ平台的Linux开发提供的一站式解决方案,涵盖了从源代码到可执行文件的整个流程,使开发者能够在Windows环境中高效地进行跨平台开发。
mmdeploy-0.8.0-windows-amd64-cuda10.2-tensorrt8.2.3.0.zip是一款由mmlab(多媒体实验室)开发的用于深度学习模型部署的工具包,专为Windows操作系统设计,适用于AMD64架构,并且集成了CUDA 10.2和TensorRT 8.2....
总的来说,CuDNN v8.0.5.39 for CUDA 11.1 on Windows 10 64位是一个强大的工具,对于在GPU上运行深度学习模型的研究者和开发者来说,这是一个必不可少的组件。通过有效地利用GPU的并行计算能力,它可以帮助缩短训练...
- **多平台支持**:虽然这里提供的版本是针对Linux ARMv7l,但ONNX Runtime还支持其他操作系统(如Windows、Linux)和不同的硬件架构(如x86、GPU、Intel MKL-DNN等)。 - **安装与使用**:通过pip工具可以轻松安装...
在Windows和Linux中,Socket API遵循Berkeley Sockets模型,也称为伯克利套接字,它源于Unix系统,并已被广泛采纳。尽管两者的基本API相似,但具体的实现和系统调用可能有所不同。 在Linux中,Socket编程通常涉及`#...
CUDA(Compute Unified Device Architecture)是一种并行计算平台和编程模型,它允许开发人员利用NVIDIA GPU的强大性能来加速计算密集型任务。 CuDNN(Convolutional Neural Network Library)是CUDA的库,专门针对...
在本资源包中,包含了适用于Windows和Linux操作系统的Apache Maven 3.5.4版本。 【标题】:“apache-maven-3.5.4-bin-windows+linux版本合集” 提供了两个不同操作系统下的二进制安装包。这使得无论是在Windows还是...
CUDNN提供了对卷积神经网络(CNNs)、循环神经网络(RNNs)、全连接网络(FCNs)等常用深度学习模型的高效实现,通过利用GPU的强大并行计算能力,极大地提高了训练和推理的速度。 **CUDNN与CUDA的关系** CUDA是...
CuDNN(CUDA Deep Neural Network)是NVIDIA公司开发的一个加速深度神经网络计算的库,它充分利用了GPU的并行计算能力,为训练和部署深度学习模型提供了高效的工具。 描述中的"cuda12"强调了这个CuDNN版本是专门为...
大模型应用_使用C#开发的ChatGPT客户端_client_支持MacOS+Windows+Linux+Android+iOS+Brower多平台_优质大模型应用项目实战
CuDNN(Convolutional Neural Network Library)是NVIDIA开发的一个用于加速深度神经网络计算的库,它与GPU硬件紧密集成,以提供高性能的卷积神经网络(CNN)、递归神经网络(RNN)和长短期记忆网络(LSTM)等计算...
1. **性能提升**:与前一版本相比,该版本在多种深度学习算法上进行了性能优化,尤其是在卷积神经网络(CNN)的前向和反向传播过程中。 2. **新功能支持**:可能包含了对新模型架构或训练技巧的支持,如Transformer...
CuDNN全称为CUDA Deep Neural Network,是由NVIDIA开发的深度学习库,用于加速基于GPU的深度神经网络(DNN)的计算。这个版本是针对CUDA工具包11.3设计的。 描述中的信息与标题相同,进一步确认了这是一个与CuDNN...
Windows CE是Microsoft针对嵌入式市场开发的系统,它基于Windows NT内核,拥有与桌面版Windows相似的API和编程模型,使得开发者能够轻松迁移现有的Windows应用。Windows CE支持丰富的图形用户界面(GUI)和网络功能...
CuDNN是NVIDIA公司为加速深度神经网络(DNNs)计算而开发的一套库,它提供了高度优化的GPU内核,用于执行常见的DNN操作,如卷积、池化、激活、归一化和反向传播等。 描述中提到,这个安装包是专为Windows操作系统...
1. **跨平台**:ONNXRuntime支持多种操作系统,包括Windows、Linux和macOS,以及各种硬件平台,如CPU、GPU和AI加速器。 2. **高效**:ONNXRuntime经过优化,能充分利用硬件资源,提供高效的推理性能。 3. **易用**:...
总之,“跨平台的socket库,windows-linux-socket”是一个旨在消除操作系统差异的工具,它通过抽象和封装Socket编程的具体细节,使得开发者能够编写出可在Windows和Linux上运行的网络应用程序。通过理解和使用这类库...
该库包含了针对卷积神经网络(CNN)、循环神经网络(RNN)和其他常见深度学习架构的高效实现。cuDNN的使用可以显著提高训练和推理的速度,使得研究人员和工程师能够在更短的时间内完成复杂的模型训练和部署。 **...