iocp

Are there in AIX mechanisms EPOLL/KQUEUE or their equivalents?

[亡魂溺海] 提交于 2021-01-28 00:34:55
问题 Are there in AIX mechanisms EPOLL(Linux2.6)/KQUEUE(FreeBSD)/IO Completion Port(Windows) or their equivalents? And what kind of mechanisms are optimal for AIO on AIX for a large number of network connections? For example according to the Benchmarks, the mechanisms KQUEUE / EPOLL much faster than SELECT. http://libevent.org/ 回答1: I believe poll set is the best choice today. There is also the iocp interfaces which comes from windows. And there are the aio interfaces which use iocp under the

Java 非阻塞 IO 和异步 IO

廉价感情. 提交于 2021-01-06 04:26:09
原文出处: JavaDoop 上一篇文章介绍了 Java NIO 中 Buffer、Channel 和 Selector 的基本操作,主要是一些接口操作,比较简单。 本文将介绍非阻塞 IO 和异步 IO,也就是大家耳熟能详的 NIO 和 AIO。很多初学者可能分不清楚异步和非阻塞的区别,只是在各种场合能听到异步非阻塞这个词。 本文会先介绍并演示阻塞模式,然后引入非阻塞模式来对阻塞模式进行优化,最后再介绍 JDK7 引入的异步 IO,由于网上关于异步 IO 的介绍相对较少,所以这部分内容我会介绍得具体一些。 希望看完本文,读者可以对非阻塞 IO 和异步 IO 的迷雾看得更清晰些,或者为初学者解开一丝丝疑惑也是好的。 NIO,JDK1.4,New IO,Non-Blocking IO NIO.2,JDK7,More New IO,Asynchronous IO,严格地说 NIO.2 不仅仅引入了 AIO 阻塞模式 IO 我们已经介绍过使用 Java NIO 包组成一个简单的客户端-服务端网络通讯所需要的 ServerSocketChannel、SocketChannel 和 Buffer,我们这里整合一下它们,给出一个完整的可运行的例子: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 public class Server {

C#开源项目:SiMay远程控制管理系统

拥有回忆 提交于 2020-12-08 01:58:33
C#开源项目:SiMay远程控制管理系统 Gitee仓库截图 下方基于原项目仓库readme 系统介绍 SiMay远程控制管理系统是一个Windows远程控制系统,底层基于IOCP的异步通信模型,能对海量客户端实时监控,目前功能已实现:逐行扫描远程桌面经典的文件管理、实时远程语音、实时摄像头、经典注册表管理、命令行终端、实时系统进程管理、用户桌面视图墙轮播等功能。并且可捕获UAC,WinLogon桌面。系统实现了中间会话服务器,可支持不同平台多主控端同时监控同一被控端。被控服务端支持绿色启动及以系统服务方式安装,项目完全采用C#.NET开发,代码仅供参考,项目不定时更新,欢迎关注点星星,fork。欢迎入群技术交流:905958449 :laughing: :blush: 申明 作为创作者,我对由此软件引起的任何行为和/或损害不承担任何责任。您对自己的行为承担全部责任,并承认此软件仅用于教育和研究目的。不得用于您不拥有或有权使用的任何系统。使用此软件,您自动同意上述内容,感谢支持。 背景 本项目仅为个人项目,经过几次重构,系统相对比较成熟了,决定开源反馈开源社区,希望更多人能和我一起进步,欢迎吐槽改进。 主控界面 创建服务端 远程桌面 文件管理 语音传输 注册表管理 中间服务器 系统项目结构 SiMay.Core【公共核心功能】 SiMay.Basic --基础通用库 SiMay

C#开源项目:SiMay远程控制管理系统

白昼怎懂夜的黑 提交于 2020-12-06 11:46:55
C#开源项目:SiMay远程控制管理系统 Gitee仓库截图 下方基于原项目仓库readme 系统介绍 SiMay远程控制管理系统是一个Windows远程控制系统,底层基于IOCP的异步通信模型,能对海量客户端实时监控,目前功能已实现:逐行扫描远程桌面经典的文件管理、实时远程语音、实时摄像头、经典注册表管理、命令行终端、实时系统进程管理、用户桌面视图墙轮播等功能。并且可捕获UAC,WinLogon桌面。系统实现了中间会话服务器,可支持不同平台多主控端同时监控同一被控端。被控服务端支持绿色启动及以系统服务方式安装,项目完全采用C#.NET开发,代码仅供参考,项目不定时更新,欢迎关注点星星,fork。欢迎入群技术交流:905958449 :laughing: :blush: 申明 作为创作者,我对由此软件引起的任何行为和/或损害不承担任何责任。您对自己的行为承担全部责任,并承认此软件仅用于教育和研究目的。不得用于您不拥有或有权使用的任何系统。使用此软件,您自动同意上述内容,感谢支持。 背景 本项目仅为个人项目,经过几次重构,系统相对比较成熟了,决定开源反馈开源社区,希望更多人能和我一起进步,欢迎吐槽改进。 主控界面 创建服务端 远程桌面 文件管理 语音传输 注册表管理 中间服务器 系统项目结构 SiMay.Core【公共核心功能】 SiMay.Basic --基础通用库 SiMay

程序员修神之路--问世间异步为何物?

扶醉桌前 提交于 2020-10-29 18:21:00
菜菜哥,今天天气挺热的,我都穿裙子了 说吧,什么事?? 苦笑一下..... 老大说把所有的接口都改成异步操作 异步好呀,最少比同步能提高吞吐量 异步是怎么回事呢,能讲讲不? 来,凑近一点,哥给你解释一番 ◆◆异步定义◆◆ 关于异步的定义,网上有很多不同的形式,但是归根结底中心思想是不变的。无论是在http请求调用的层面,还是在cpu内核态和用户态传输数据的层面,异步这个行为针对的是调用方: 一个可以无需等待被调用方的返回值就让操作继续进行的方法 在多数程序员的概念中一般是指线程处理的层面: 异步是计算机多线程的异步处理。与同步处理相对,异步处理不用阻塞当前线程来等待处理完成,而是允许后续操作,直至其它线程将处理完成,并回调通知此线程 可以这样通俗的理解,异步主要解决的问题是不阻塞调用方,用方这里可以是http请求的发起者,也可以是一个线程。 但此处需要明确的是:异步与多线程与并行不是同一个概念。 ◆◆CPU密集型操作◆◆ 我听有的同学说,异步解决的是IO密集型的操作,菜菜觉得是不准确的。异步同样可以解决CPU密集型操作,只不过场景有限而已。有一个前提:利用异步解决CPU密集型操作要求当前运行环境支持多线程才行,比如javascript这个语言,本质上它的运行环境是单线程的,所以对于CPU密集型操作,javascript会显得力不从心。 异步解决CPU密集操作一般情况下发生在同进程中

问世间异步为何物?

为君一笑 提交于 2020-10-24 13:55:32
异步定义 关于异步的定义,网上有很多不同的形式,但是归根结底中心思想是不变的。无论是在http请求调用的层面,还是在cpu内核态和用户态传输数据的层面,异步这个行为针对的是调用方: 一个可以无需等待被调用方的返回值就让操作继续进行的方法 在多数程序员的概念中一般是指线程处理的层面: 异步是计算机多线程的异步处理。与同步处理相对,异步处理不用阻塞当前线程来等待处理完成,而是允许后续操作,直至其它线程将处理完成,并回调通知此线程 可以这样通俗的理解,异步主要解决的问题是不阻塞调用方,调用方这里可以是http请求的发起者,也可以是一个线程。 但此处需要明确的是:异步与多线程与并行不是同一个概念。 CPU密集型操作 我听有的同学说,异步解决的是IO密集型的操作,菜菜觉得是不准确的。异步同样可以解决CPU密集型操作,只不过场景有限而已。有一个前提:利用异步解决CPU密集型操作要求当前运行环境支持多线程才行,比如javascript这个语言,本质上它的运行环境是单线程的,所以对于CPU密集型操作,javascript会显得力不从心。 异步解决CPU密集操作一般情况下发生在同进程中,为什么这么说呢,如果发生在不同机器或者不同进程在很多情况下已经属于IO密集型的范围了。这里顺便提醒一下:IO操作可不单单是指磁盘的操作,所有有输入/输出(Input/Output)操作的都可以泛称为IO。 举个栗子吧

.NET 异步详解

*爱你&永不变心* 提交于 2020-10-15 21:34:35
前言 博客园中有很多关于 .NET async / await 的介绍,但是很遗憾,很少有正确的,甚至说大多都是“从现象编原理”都不过分。 最典型的比如通过前后线程 ID 来推断其工作方式、在 async 方法中用 Thread.Sleep 来解释 Task 机制而导出多线程模型的结论、在 Task.Run 中包含 IO bound 任务来推出这是开了一个多线程在执行任务的结论等等。 看上去似乎可以解释的通,可是很遗憾,无论是从原理还是结论上看都是错误的。 要了解 .NET 中的 async / await 机制,首先需要有操作系统原理的基础,否则的话是很难理解清楚的,如果没有这些基础而试图向他人解释,大多也只是基于现象得到的错误猜想。 初看异步 说到异步大家应该都很熟悉了,2012 年 C# 5 引入了新的异步机制: Task ,并且还有两个新的关键字 await 和 async ,这已经不是什么新鲜事了,而且如今这个异步机制已经被各大语言借鉴,如 JavaScript、TypeScript、Rust、C++ 等等。 下面给出一个简单的对照: 语言 调度单位 关键字/方法 C# Task<> 、 ValueTask<> async 、 await C++ std::future<> co_await Rust std::future::Future<> .await

一个工业级、跨平台、轻量级的 tcp 网络服务框架:gevent

纵然是瞬间 提交于 2020-10-05 13:51:50
作为公司的公共产品,经常有这样的需求:就是新建一个本地服务,产品线作为客户端通过 tcp 接入本地服务,来获取想要的业务能力。 与印象中动辄处理成千上万连接的 tcp 网络服务不同,这个本地服务是跑在客户机器上的,Win32 上作为开机自启动的 windows 服务运行; Linux 上作为 daemon 在后台运行。总的说来就是用于接收几个产品进程的连接,因此轻量化是其最重要的要求,在这个基础上要能兼顾跨平台就可以了。 其实主要就是 windows,再兼顾一点儿 linux。 考察了几个现有的开源网络框架,从 ACE 、boost::asio 到 libevent,都有不尽于人意的地方: a) ACE:太重,只是想要一个网络框架,结果它扒拉扒拉一堆全提供了,不用还不行; b) boost::asio:太复杂,牵扯到 boost 库,并且引入了一堆 c++ 模板,需要高版本 c++ 编译器支持; c) libevent:这个看着不错,当时确实用这个做底层封装了一版,结果发版后发现一个比较致命的问题,导致在防火墙设置比较严格的机器上初始化失败,这个后面我会详细提到。 其它的就更不用说了,之前也粗略看过陈硕的 muddo,总的感觉吧,它是基于其它开源框架不足地方改进的一个库,有相当可取的地方,但是这个改进的方向也主要是解决更大并发、更多连接,不是我的痛点,所以没有继续深入研究。 好了

Linux网络编程基础之Reactor模式和Proactor模式

混江龙づ霸主 提交于 2020-08-18 07:32:29
在Linux平台下的服务器开发中,如何去构建高性能的网络通信框架是重中之重,自然就绕不开网络通信模型的选择和应用;目前网络通信模型中涉及到的模式有两个:Reactor模式和Proactor模式。 在介绍这两个模式之前,先详细地阐述下阻塞IO、非阻塞IO、同步、异步的概念,因为经常有很多同学能把这些词汇编出各种奇怪的组合出来,连自己都不知道是什么意思。 阻塞IO:当应用层发起read请求时,发出read请求的线程会被挂起,直到操作系统完成数据从内核区到应用层缓冲区的拷贝,read调用才返回;write操作也是一样。 非阻塞IO:当应用层发起read请求,而操作系统没有准备好数据,read调用会立刻返回;同时操作系统会返回一个EWOULDBLOCK的错误码。但发起read请求的线程会不断地去询问操作系统“数据准备好了吗?”,如果准备好了,那么就把数据从内核空间拷贝到应用层缓冲区。 上面就是阻塞IO和非阻塞IO,但是有一点需要说明,在操作系统把数据准备好,并把数据拷贝出来的过程是同步的,也就是说必须要拷贝完,read才会返回。所以同步/异步是用于形容数据从内核空间拷贝到应用程序缓冲区的过程。 同步:当操作系统内核准备好数据,应用程序发出read请求,数据的拷贝是和read函数同步进行的,如果数据较多,那么read调用的耗时会较长。 异步:当应用程序发出***aio_read***请求后

一个工业级、跨平台、轻量级的 tcp 网络服务框架:gevent

允我心安 提交于 2020-08-16 10:27:10
作为公司的公共产品,经常有这样的需求:就是新建一个本地服务,产品线作为客户端通过 tcp 接入本地服务,来获取想要的业务能力。 与印象中动辄处理成千上万连接的 tcp 网络服务不同,这个本地服务是跑在客户机器上的,Win32 上作为开机自启动的 windows 服务运行; Linux 上作为 daemon 在后台运行。总的说来就是用于接收几个产品进程的连接,因此轻量化是其最重要的要求,在这个基础上要能兼顾跨平台就可以了。 其实主要就是 windows,再兼顾一点儿 linux。 考察了几个现有的开源网络框架,从 ACE 、boost::asio 到 libevent,都有不尽于人意的地方: a) ACE:太重,只是想要一个网络框架,结果它扒拉扒拉一堆全提供了,不用还不行; b) boost::asio:太复杂,牵扯到 boost 库,并且引入了一堆 c++ 模板,需要高版本 c++ 编译器支持; c) libevent:这个看着不错,当时确实用这个做底层封装了一版,结果发版后发现一个比较致命的问题,导致在防火墙设置比较严格的机器上初始化失败,这个后面我会详细提到。 其它的就更不用说了,之前也粗略看过陈硕的 muddo,总的感觉吧,它是基于其它开源框架不足地方改进的一个库,有相当可取的地方,但是这个改进的方向也主要是解决更大并发、更多连接,不是我的痛点,所以没有继续深入研究。 好了