首页 > 其他分享 >golang中基于kevent的IO多路复用实践

golang中基于kevent的IO多路复用实践

时间:2024-06-02 15:14:50浏览次数:15  
标签:kqueue socket err syscall golang IO np ev kevent

https://github.com/zongzw-learn/learn-go/tree/master/basics/tcp-poller

kqueue在golang语言下的使用实践

将kqueue的操作细节封装在NetPoller接口中,实现KqueuePoller的三个API:

  • Start 启动基于kqueue的IO多路复用事件监听
  • Close 停止kqueue
  • SetHandler 设置可插入式的数据处理函数,目前只处理socket读取操作。亦可以根据需要添加写操作

使用方法参考 main函数

原理

  • syscall + kqueue + kevent + socket API

核心代码解读

			n, err := syscall.Kevent(np.kq, nil, np.events, nil)
			if err != nil {
				// ...
			}
			for i := 0; i < n; i++ {
				ev := np.events[i]
				if ev.Ident == uint64(np.socket) {
					// 对于server socket的事件处理
					// ...
				} else {
					// 对于客户socket的事件处理
					switch ev.Filter {
					case syscall.EVFILT_READ:
						b, err := np.readFd(int(ev.Ident))
						if err != nil {
							if err == io.EOF {
								// 客户socket的关闭情况
								syscall.Close(int(ev.Ident))
							} else {
								log.Printf("failed to read from socket %d: %s", ev.Ident, err.Error())
							}
						} else {
							// 客户socket的读操作
						}
					case syscall.EVFILT_WRITE:
						// 客户socket的写操作
					default:
						log.Printf("not supported for Filter type: %d", ev.Filter)
					}
				}
			}

标签:kqueue,socket,err,syscall,golang,IO,np,ev,kevent
From: https://www.cnblogs.com/zongzw/p/18227142

相关文章

  • mask -rcnn benchmark编译失败RuntimeError: Error compiling objects for extension(
    1.首先几步跟官网一样condacreate--namemaskrcnn_benchmarkpython==3.8(建议装3.8,好装pytorch)condaactivatemaskrcnn_benchmark#thisinstallstherightpipanddependenciesforthefreshpythoncondainstallipythonpip#maskrcnn_benchmarkandcocoa......
  • 【STM32基础学习】--GPIO原理
    一.GPIO入门知识全称: generalpurposeintputoutpot(通用输入输出端口)。可以做输入也可以做输出。STM32芯片的GPIO引脚与外部设备连接起来,从而实现与外部通讯,控制以及数据采集的功能。二.GPIO的八种工作模式1.4种输入模式(可以读取端口的高低电平或者电压,用于读取按键......
  • 微服务实践之使用 Visual Studio 2022 调试Dapr 应用程序
    安装配置相关软件安装PowerShell7/Coredotnettoolinstall--globalPowerShell安装VisualStudio扩展MicrosoftChildProcessDebuggingPowerTool2022安装插件后启动VisualStudio,可以在Debug->OtherDebuggingTargets中找到ChildProcessDebuggingSet......
  • PDF Shaper Professional v14.2 – 免费实用的全能PDF工具箱!
    软件介绍PDFShaper–免费实用的全能PDF工具箱!这款PDF转换器包含了很多非常实用的PDF工具,可以轻松的把PDF转成Word,PDF转图像,PDF加密等等。它还可以合并,分割,加密和解密PDF,图像转换为PDF,PDF转换为RTF或图像,从PDF中提取文本和图像,转换或裁剪已签名的PDF等。PDFSh......
  • 【CNN分类】基于马尔可夫转移场卷积网络多头注意力机制 MTF-CNN-Mutilhead-Attention
    马尔可夫转移场卷积神经网络是在传统卷积神经网络的基础上,引入了马尔可夫随机场模型来捕捉特征之间的相关性。这种方法能够更好地提取特征并增强模型的学习能力。而多头注意力机制则可以进一步增强模型对关键特征的关注,提高故障诊断的准确性。下面是一个基于MATLAB的MTF-......
  • [题解]P4381 [IOI2008] Island
    P4381[IOI2008]Island题意:给定一个基环树森林,求每个基环树的直径之和。我们发现,一棵基环树的直径只有下面两种情况:环上的某一点作为根的子树的直径。环上有两点,每个点引出一条链,然后再将这两点相连。对于第一种情况,我们仅需用树形dp的方法求出每个子树的直径(见OIWiki-......
  • Collection的使用
    特点:代表一组任意类型的对象,无序、无下标、不能重复。方法:1.booleanadd(Objectobj)添加一个对象2.booleanaddAll(Collectionc)将一个集合中的所有对象添加到此集合中。3.voidclear()清空此集合中的所有对象。4.booleancontains检查此集合中是否包含o对象5.booleanequals(O......
  • 2024最新VMware Workstation Pro下载教程
    自从2024年5月份之后,VMwareworkstationplayer就不能直接在vm官网下载,需要到broadcom博通网站上下载下面介绍最新下载步骤:百度直接搜索vmware进入官网点击WorkstationPro链接博通注册对应的账号现在下载都需到博通注册对应的账号登录邮箱输入对应的验证码......
  • ProgGen: Generating Named Entity Recognition Datasets Step by step with Self Ref
    本文是LLM系列文章,针对《ProgGen:GeneratingNamedEntityRecognitionDatasetsStepbystepwithSelfReflexiveLargeLanguageModels》的翻译。ProgGen:使用自反射大型语言模型逐步生成命名实体识别数据集摘要1引言2相关工作3方法4实验5结论6局限性......
  • A Novel Paradigm Boosting Translation Capabilities of Large Language Models
    本文是LLM系列文章,针对《ANovelParadigmBoostingTranslationCapabilitiesofLargeLanguageModels》的翻译。提升大型语言模型翻译能力的新范式摘要1引言2相关工作3新的训练策略4实验5结果和分析6消融研究:如果我们直接使用大量的翻译数据进行SFT会......