2501d,jingo优化

原文
大家好,我重构和优化了一下jin.go这里:
我去掉了vibe.d依赖,因为它又慢又大,而且我无法与2版本交朋友.当仅运行1000vibe纤程时,不仅应用崩溃,甚至图形系统驱动也崩溃一次,这需要重启笔记本电脑.

当前,我用小栈大小的本地流(4kb)解决.
我真很期待photon的稳定性,以恢复支持纤程.如果在标准库中看到它,那真是太棒了.
我不得不丢弃移动语义,因为我无法用闭包.当前,由复制构造器控制队列的引用数.

好消息!经过所有优化后,通道在上述基准测试中显示出令人印象深刻的速度,来在两个泵送消息.

import std.datetime.stopwatch;
import std.range;
import std.stdio;
import jin.go;
const long n = 100_000_000;auto threadProducer() {return n.iota;}void main() {auto queue = go!threadProducer;StopWatch sw;sw.start();long sum = 0;foreach (p; queue) {sum += p;}sw.stop();writefln("received %d messages in %d msec sum=%d speed=%d msg/msec", n,sw.peek.total!"msecs", sum, n / sw.peek.total!"msecs");assert(sum == (n * (n - 1) / 2));}

718毫秒内收到100000000条消息sum=4999999950000000,speed=139275msg/msec
我几乎在goroutines基准测试中赶上了Go:

> go run app.go -release

工作者结果时间
849995000000109.7644毫秒

> dub -quiet -build=release

工作者结果时间
049995000000124毫秒
坏消息.有时结果错误,我不知道为什么.

> dub -quiet -build=release

工作者结果时间
049945005000176毫秒
我使用了原子获取释放操作,尽管它们在x86上不必,但我希望编译器考虑它们且不要重排指令.但即使有更严格的内存栅,我也没有得到非常稳定的结果.
如果有人能告诉我这里可能原因,我将不胜感激.

这里

并发的putpopFront不能避免队列中的竞争.
单独访问_offset原子的,但它在putpopFront中的使用点不是原子的.
两个函数都如下:
1,原子读偏移
2,干活
3,原子写偏移
如果一个函数完成了1,然后另一个函数完成了1+2+3,则你就会得到一个竞争.
链接两个原子对象并不会按整体原子化这两个,这是典型的互斥错误.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/66080.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js的一些处理

1.翻转字符串 let str abcdef str str.split().reverse().join() console.log(str) 因此想到了我之前写的截取字符串获取参数跳转,在写一遍 let str nameJack&age18&gender男 let list str.split(&); let obj {} list.forEach((v)>{ …

vue3 css实现文字输出带光标显示,文字输出完毕,光标消失的效果

Vue实现过程如下&#xff1a; <template><div ><p ref"dom_element" class"typing" :class"{over_fill: record_input_over}"></p></div> </template> <script setup> import {onMounted, ref} from…

node.js之---集群(Cluster)模块

为什么会有集群&#xff08;Cluster&#xff09;模块&#xff1f; 集群&#xff08;Cluster&#xff09;模块的作用 如何使用集群&#xff08;Cluster&#xff09;模块&#xff1f; 为什么会有集群&#xff08;Cluster&#xff09;模块 Node.js 是基于 单线程事件驱动 模型的…

[C++]vector(超详细)

在学习完了string后&#xff0c;我们来学习新的STL容器vector&#xff0c;是真正的属于STL中的一员&#xff0c;vector也是STL的基础容器&#xff0c;英文释义是向量&#xff0c;其实实质上就是顺序表。 在这个部分我们会学习的非常快&#xff0c;第一个原因是由于vector的设计…

2025年度全国会计专业技术资格考试 (甘肃考区)报名公告

2025年度全国会计专业技术资格考试 &#xff08;甘肃考区&#xff09;报名公告 按照财政部、人力资源和社会保障部统一安排&#xff0c;2025年度全国会计专业技术初级、中级、高级资格考试报名即将开始&#xff0c;现将甘肃考区有关事项通知如下&#xff1a; 一、报名条件 …

算法 class 005 (对数器C语言实现)

对数器的概念&#xff1a; 用来测试你的算法是否正确。 怎么做呢&#xff1f; 1&#xff1a;比如&#xff0c;写个冒泡排序&#xff0c;作为对比的对象 2&#xff1a;生成一个随机数 数组&#xff0c;用来测试 3&#xff1a;用冒泡排序和你想要验证的那个排序算法&#xff0c;同…

风力涡轮机缺陷检测数据集,91.4%准确识别率,18912张图片,支持yolo,PASICAL VOC XML,COCO JSON格式的标注

风力涡轮机缺陷检测数据集&#xff0c;91.4&#xff05;准确识别率&#xff0c;18912张图片&#xff0c;支持yolo&#xff0c;PASICAL VOC XML&#xff0c;COCO JSON格式的标注 数据集下载&#xff1a; &#xff59;&#xff4f;&#xff4c;&#xff4f; &#xff56;&#…

termux配置nginx+php

只能以默认用户u0_axx运行,修改用户会报错An error occurred.或者file no found 安装nginx pkg install nginx安装php-fpm pkg install nginx修改nginx配置文件, nano ../usr/etc/nginx/nginx.conf#端口必须设置在1024以上(1024以下需要root,但php-fpm不能以root用户运行,n…

机器人对物体重定向操作的发展简述

物体重定向操作的发展简述 前言1、手内重定向和外部重定向2、重定向原语3、重定向状态转换网络4、连续任意姿态的重定向5、利用其他环境约束重定向总结Reference 前言 对于一些特殊的任务&#xff08;如装配和打包&#xff09;&#xff0c;对物体放置的位姿由明确的要求&#…

k8s基础(1)—Kubernetes-Pod

一、Pod简介 Pod是Kubernetes&#xff08;k8s&#xff09;系统中可以创建和管理的最小单元&#xff0c;是资源对象模型中由用户创建或部署的最小资源对象模型‌。Pod是由一个或多个容器组成的&#xff0c;这些容器共享存储和网络资源&#xff0c;可以看作是一个逻辑的主机‌。…

NLP 中文拼写检测纠正论文-07-NLPTEA-2020中文语法错误诊断共享任务概述

拼写纠正系列 NLP 中文拼写检测实现思路 NLP 中文拼写检测纠正算法整理 NLP 英文拼写算法&#xff0c;如果提升 100W 倍的性能&#xff1f; NLP 中文拼写检测纠正 Paper java 实现中英文拼写检查和错误纠正&#xff1f;可我只会写 CRUD 啊&#xff01; 一个提升英文单词拼…

根据 el-dialog 的高度动态计算 el-table 的高度

根据 el-dialog 的高度动态计算 el-table 的高度&#xff0c;可以使用 Vue 的 ref 和生命周期钩子来实现。以下是一个实现方案&#xff1a; 首先&#xff0c;给 el-dialog 和 el-table 添加 ref&#xff1a; <el-dialogv-model"testInstrumentDialogVisible"tit…

es 3期 第21节-Bucket常用分桶聚合实战

#### 1.Elasticsearch是数据库&#xff0c;不是普通的Java应用程序&#xff0c;传统数据库需要的硬件资源同样需要&#xff0c;提升性能最有效的就是升级硬件。 #### 2.Elasticsearch是文档型数据库&#xff0c;不是关系型数据库&#xff0c;不具备严格的ACID事务特性&#xff…

【ArcGISPro/GeoScenePro】解决常见的空间参考和投影问题

修复空间参考缺失的图像 数据 https://arcgis.com/sharing/rest/content/items/535efce0e3a04c8790ed7cc7ea96d02d/data 查看属性坐标 查看属性范围 范围值并不是零或接近于零。 这意味着栅格具有范围,因此其已正确进行

Fedora安装docker

Install Docker Engine on Fedora https://docs.docker.com/engine/install/fedora/ 更新系统 首先&#xff0c;更新你的系统以确保所有软件包都是最新的&#xff1a; sudo dnf update -y安装必要的依赖 安装一些必要的工具和库&#xff0c;如yum-utils&#xff0c;这将帮助…

集线器,交换机,路由器,mac地址和ip地址知识记录总结

一篇很不错的视频简介 基本功能 从使用方面来说&#xff0c;都是为了网络传输的标识&#xff0c;和机器确定访问对象 集线器、交换机和路由器 常听到路由器和集线器&#xff0c;下面是区别&#xff1a; 集线器 集线器&#xff1a;一个简单的物理扩展接口数量的物理硬件。…

跳跃表(跳表)是什么

为什么要有跳表 正常链表只能一个一个往下走但是如果我直到我的目标位置就在链表的中部但是我还得一步一步走过去很浪费时间&#xff0c;所以跳表就是在正常链表的基础上添加了多步跳跃的指针。 什么是跳表 跳表&#xff08;Skip List&#xff09;是一种概率型的数据结构&am…

【自动驾驶汽车通讯协议】RGMII通信技术详解

文章目录 0. 前言1. RGMII概述1.1 RGMII说明1.2 RGMII作用&目的 2. RGMII的发展历史2.1 MII (Media Independent Interface)2.2 GMII (Gigabit Media Independent Interface)2.3 RGMII (Reduced Gigabit Media Independent Interface) 3. 架构设计3.1 接口信号3.2 信号时序…

mamba-ssm安装

注意1&#xff1a;mamba-ssm要与casual-conv1d一起安装。 注意2&#xff1a;mamba-ssm与cuda、pytorch版本要对应。需要看你下载的代码的requirements.txt causal-conv1d与mamba的whl包官网下载&#xff1a; https://github.com/Dao-AILab/causal-conv1d/releases?page3 htt…

浏览器选中文字样式

效果 学习 Chrome: 支持 ::selection。Firefox: 支持 :-moz-selection 和 ::selection。Safari: 支持 ::selection。Internet Explorer: 支持 :-ms-selection。Microsoft Edge: 支持 ::-ms-selection 和 ::selection。 代码 <!DOCTYPE html> <html lang"en&qu…