`
febird
  • 浏览: 254263 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

异步通讯中使用纤程(Fiber/UserSpaceThread)

 
阅读更多

在异步通讯中,一般使用一个线程来select/poll/epoll,收到信号后,解码消息头,或者整个消息,然后将相应的fd交给其他线程处理。

这看上去的确是个很好的办法,但是,如果使用Tcp,并且遇到一个复杂的派发过程:收到的消息大小未知,而只能使用序列化方法解码消息然后根据其内容进行派发。这种情况的特征是:在大多数情况下,都可以无阻塞地读取并解码整条消息,但也有极小的可能在某条消息上阻塞(消息不完整)。

这种情况往往使用线程池,select线程一得到可读信号,就把相应的fd交给线程池处理。这样是解决了问题,但是又有个新问题:线程切换的开销太大。如果在高速局域网内,并且每个请求的实际执行时间非常短,问题就会比较显著。

想了很久,也想出了一个解决办法:利用Fiber/UserSpaceThread,中文译作纤程/用户空间线程,不懂的看这里

select线程收到读信号后,仍然执行解码,如果消息不完整,就将当前执行绪切换到Select执行绪,用行话说就是:将当前Fiber挂起,切换到Select Fiber。因为这多个Fiber都在用户空间中运行,所以速度非常快,并且,还不需要内核调度。其实速度的提升主要不是在这里,而是在大多数情况下不需要切换线程。

 

分享到:
评论

相关推荐

    c# socket同步通讯 异步通讯 客户端 服务端 实例

    本文将深入探讨C#中的Socket同步通讯与异步通讯,以及如何构建客户端和服务端程序。 首先,让我们了解什么是Socket。Socket是网络通信的基本单元,它允许应用程序通过网络发送和接收数据。在C#中,Socket类位于...

    异步加载数据更新主线程

    Xamarin.Android开发——异步加载数据更新主线程 //异步加载数据开始 doInBackground (); //异步加载数据开始end protected async void doInBackground () {

    c# UDP异步通讯

    相较于同步方式,异步通讯能更好地处理并发连接,避免阻塞主线程,提高程序的响应性和性能。 首先,我们来详细解释一下UDP异步通讯的关键概念和技术点: 1. **Socket类**:在C#中,System.Net.Sockets命名空间中的...

    使用Win32API实现Windows下异步串口通讯_异步串口通讯_

    在Windows操作系统中,异步串口通信是一种高效的数据传输方式,尤其适用于需要处理大量数据流且不影响主线程操作的应用场景。本文将详细讲解如何利用Win32 API来实现这一功能。 1. 异步非阻塞串口通讯的优点 异步...

    udp异步网络通讯(附源码)

    总结来说,本教程介绍了如何在C#中使用`UdpClient`进行异步UDP通信,包括异步发送和接收数据的基本步骤。提供的`udphelper.dll`库文件可能进一步简化了这一过程,使得开发者能更高效地构建网络应用。通过深入理解和...

    C# Socket异步通讯

    在提供的文件"异步通讯服务器"和"异步通讯客户端"中,应该包含了具体的代码实现,这些代码会展示如何在C#中使用Socket进行异步通讯。你可以通过学习这些示例代码,更好地理解和应用上述知识点。 总结来说,C#的...

    c#异步通讯

    综上所述,"C#异步通讯"涵盖了C#中使用TCP协议进行高效网络通信的关键技术和实践,包括异步编程、TCP连接管理、数据传输以及错误处理。通过理解并应用这些知识点,开发者可以构建出高性能的网络应用程序。

    使用Win32API实现Windows下异步串口通讯.doc

    实现异步串口通讯的关键在于使用Win32 API中的特定函数。首先,通过`CreateFile()`函数打开串口,设定串口的名称、波特率、奇偶校验、数据位和停止位。接着,使用`GetCommTimeouts()`获取串口的原始超时设置,以防止...

    Socket编程 (异步通讯) (Tcp,Udp)

    Socket编程 (异步通讯) (Tcp,Udp) Socket编程 (异步通讯) (Tcp,Udp) Socket编程 (异步通讯) (Tcp,Udp) Socket编程 (异步通讯) (Tcp,Udp) Socket编程 (异步通讯) (Tcp,Udp) Socket编程 (异步通讯) (Tcp,Udp) Socket...

    即时通讯框架(socket 异步通讯)

    下面我们将深入探讨这个主题,包括Socket的基础知识、异步通讯的原理以及如何在C#中实现。 首先,Socket是网络通信的基本组件,它提供了进程间通信(IPC)的能力,尤其是在互联网上。Socket分为两种类型:流式...

    基于TCP/IP协议的C/S异步通讯传输工具

    基于TCP/IP协议的C/S异步通讯传输工具,开发环境采用的是C#平台

    Asynchronous 强大的异步通讯组件

    Asynchronous function calls utilizing multiple threads. 开源的异步通讯单元,有了这个,做异步通讯变得如此简单。

    异步通知和异步I/O

    在Linux系统中,异步通知和异步I/O是设备驱动开发中的重要概念,它们极大地提高了系统的效率和响应性。本文将深入探讨这两个主题,并结合《Linux设备驱动开发详解》一书中的理论与实践,为你提供详尽的理解。 首先...

    socket异步通讯实例

    总结来说,"socket异步通讯实例"是C#网络编程中的一项核心技能,它利用异步编程模型提高了系统性能,并通过Socket类实现了高效的网络通信。"服务器"和"客户端"文件代表了通信的两端,通过异步方法处理连接和数据传输...

    异步通讯CSSocket

    异步通讯CSSocket是一种在网络编程中广泛使用的通信技术,它主要基于Windows操作系统的Socket API,特别是在Visual C++ 6.0环境下开发。CSSocket库提供了一种高效且灵活的方式来实现客户端(Client)和服务器端...

    一个简单的异步网络通讯源代码

    在JavaScript中,可以使用async/await语法来编写更易读的异步代码。 在压缩包文件中,Readme.txt可能是包含项目说明、使用方法和注意事项的文本文件。WC和WS可能是服务器端(Server)和客户端(Client)的源代码...

    在C#中使用异步Socket编程实现TCP网络服务的CS的通讯构架

    本节将详细介绍如何利用C#中的异步Socket编程来实现TCP网络服务的C/S通讯构架。 首先,我们要理解TcpListener和TcpClient类在.NET框架中的基本作用。TcpListener负责监听来自客户端的连接请求,而TcpClient则用于...

    C# 通讯TCP异步

    通常使用`try-catch`块捕获并处理异常,或者在异步方法的`catch`块中使用`TaskCompletionSource`来传播异常。 8. **关闭连接**:当通信完成后,记得关闭网络流、客户端和服务器端的连接。`Close()`或`Dispose()`...

    C#实现异步连接Sql Server数据库的方法

    这是因为异步操作允许程序在等待数据库响应时执行其他任务,而不是阻塞主线程,从而避免了UI冻结或整体性能下降。本篇文章将深入探讨如何使用C#的`async`和`await`关键字来实现异步数据库连接。 首先,`async`和`...

    socket 异步 即时通讯

    本文将深入探讨异步Socket通信的原理及其在即时通讯中的应用。 首先,Socket是网络编程的基础,它提供了一种在不同主机之间建立连接并进行数据传输的接口。在同步模式下,Socket通信通常是阻塞的,即发送或接收数据...

Global site tag (gtag.js) - Google Analytics