前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >云函数benchmark

云函数benchmark

原创
作者头像
黄希彤
修改2022-12-23 12:37:41
7220
修改2022-12-23 12:37:41
举报
文章被收录于专栏:黄希彤的专栏黄希彤的专栏

调试一个计算密集型的小玩意儿,本机计算挺久的,感觉还是需要更多cpu,正在想要不要用批量计算,读文档的时候发现启动也并不是很方便,数据准备到COS/CFS上,然后启动运行,再去COS/CFS上捞结果,这样用云函数来做岂不是更轻松?而且云函数就可以并发几十几百个实例,如果用来做计算性能怎么样呢?干脆做了个一个benchmark。这里用crypto的大质数生成算法来测试计算能力。

代码语言:javascript
复制
'use strict';

const {Worker}=require('worker_threads')
const threads = 1;

let counter=0;
let arr=[]
let workerScript = `import {parentPort} from 'worker_threads';
import crypto from 'crypto';
let counter=0;
parentPort.onmessage = async (event) => {
	const cmd = event.data;
	if(cmd=="start"){
		while(true){
			await new Promise((res,rej)=>{
				crypto.createDiffieHellman(512).getPrime();
				counter++
				setImmediate(res);
			})
		}
	}else if(cmd=="stop"){
		parentPort.postMessage(counter)
	}
}`
let url = new URL("data:text/javascript;charset=UTF-8,"+encodeURIComponent(workerScript));
for(let i=0;i<threads;i++){
	let worker = new Worker(url) 
	worker.on('message', value => {
		counter+=value
		worker.res();
		worker.terminate()
	});
	arr.push(worker)
}



exports.main_handler = (event, context,callback) => {
    Promise.all(arr.map(worker=>{
        let p = new Promise((res,rej)=>{
            worker.res = res;
        })
        worker.postMessage("start");
        return p;
    })).then(()=>{
        console.log("threads: "+threads+" score: "+(counter/10)+" avg: "+(counter/threads/10))
        callback(null,"threads: "+threads+" score: "+(counter/10)+" avg: "+(counter/threads/10))
    })

    setTimeout(()=>{
        arr.forEach(worker=>worker.postMessage("stop"))
    },20000)
    return event
};

require('os').cpus().length在一些环境下会拿到0,因此这里干脆hardcode了线程数,每次按照具体的环境改一下代码也不麻烦。在多核场景下运行的时候可以修改threads常量来增加并发线程数。在一台8核16G上测试到的数值作为100分。

代码语言:javascript
复制
threads: 8 score: 104 avg: 13

在4核的macbook上测试的时候成绩也差不多。

代码语言:javascript
复制
threads: 6 score: 106.5 avg: 17.75

在手机(Mate40pro)上测的就比较惊喜了

能顶大半台服务器或者笔记本了,看来以后可以把一些计算交给手机。

回到云函数。在腾讯云64M的SCF实例上测得10分左右,这就超出期望了,十个这样的微小实例岂不是就可以打得过一台8核服务器?不过增加内存的时候分配到的cpu并没有成比例增加。因此任务拆给更多的小实例计算可能可以蹭到更多的计算资源。

同时也测试了一下阿里云FC的最低配0.05核128M

结果也类似,用最小实例能蹭到最多的计算资源。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云函数
云函数(Serverless Cloud Function,SCF)是腾讯云为企业和开发者们提供的无服务器执行环境,帮助您在无需购买和管理服务器的情况下运行代码。您只需使用平台支持的语言编写核心代码并设置代码运行的条件,即可在腾讯云基础设施上弹性、安全地运行代码。云函数是实时文件处理和数据处理等场景下理想的计算平台。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档