1. 程式人生 > >(pbc lua 加入)c++_lua_Python with/without extension效能測試 (10萬次SerializeToString & ParseFromString)

(pbc lua 加入)c++_lua_Python with/without extension效能測試 (10萬次SerializeToString & ParseFromString)

A. extension

   c++: 0.259s

   lua:6.136s

   python: 15.874s

    c++比 lua  -->23.6倍

    lua比python -->2.58倍


B.without extension

    c++:0.098s

    林卓毅 protoc-gen-lua lua:1.788s

    雲風 pbc lua: message mode 0.585s, pack mode0.187s

    python: 4.645s

    c++比 lua  -->18.2倍

    lua比python -->2.59倍

c++ 帶extension , 慢2.64

lua  帶extension, 慢3.43

python 帶extension, 慢3.41

---------------------------------------------

測試環境:vmware Debian6 , time函式

gcc 4.4.5

lua 5.1.4

python 2.6.6

protobuf 2.4.1

------------------c++------------------------------

#include "person.pb.h"
#include <iostream>
#include <stdio.h>
//#include <windows.h>
int main(int argc, char* argv[])
{
	GOOGLE_PROTOBUF_VERIFY_VERSION;
	//printf("%s\n","hello");
	Person person;
	person.set_id(1000);
	person.set_name("Alice");
	person.set_email("
[email protected]
"); /* Phone* pPhone1 = person.AddExtension(Phone::phones); pPhone1->set_num("2147483647"); pPhone1->set_type(Phone_PHONE_TYPE_HOME); Phone* pPhone2 = person.AddExtension(Phone::phones); pPhone2->set_num("123456789"); pPhone2->set_type(Phone_PHONE_TYPE_MOBILE); //int aaa = person.ExtensionSize(Phone::phones); //Phone pPhone3 = person.GetExtension(Phone::phones, 1); */ std::string data; Person personShow; //DWORD dwStart = GetTickCount(); for(int i=0; i< 100000; i++) { person.SerializeToString(&data); personShow.ParseFromString(data); } //DWORD dwUse = GetTickCount() - dwStart; //printf("%d\n",dwUse); google::protobuf::ShutdownProtobufLibrary(); return 0; }
-------------------------------------------lua------------------------------------------
package.path = package.path .. ';../protobuf/?.lua'
package.cpath = package.cpath .. ';../protobuf/?.so'

require 'person_pb'
local person= person_pb.Person()
person.id = 1000
person.name = "Alice"
person.email = "[email protected]"
--[[
local home = person.Extensions[person_pb.Phone.phones]:add()
home.num = "2147483647"
home.type = person_pb.Phone.HOME

local home2 = person.Extensions[person_pb.Phone.phones]:add()
home2.num = "2147483647"
home2.type = person_pb.Phone.MOBILE
]]
local msg = person_pb.Person()
local data
for i=1, 100000 do
	data = person:SerializeToString()
	msg:ParseFromString(data)
end
--print(msg)

----------------------------------------------PBC lua--------------------------------------

local protobuf = require "protobuf"

addr = io.open("../../build/addressbook.pb","rb")
buffer = addr:read "*a"
addr:close()
protobuf.register(buffer)

local person = {
	name = "Alice",
	email = "[email protected]",
	id = 1000,
--	phone = {
--		{ number = "123456789" , type = "MOBILE" },
--		{ number = "87654321" , type = "HOME" },
--	}
}

local buffer
local t
for i=1, 100000 do
	--buffer = protobuf.encode("tutorial.Person", person)
	-- t = protobuf.decode("tutorial.Person", buffer)
	buffer = protobuf.pack("tutorial.Person name id email","Alice",1000,"[email protected]")
	protobuf.unpack("tutorial.Person name id email", buffer )
end
--[[
for k,v in pairs(t) do
	if type(k) == "string" then
		print(k,v)
	end
end

print(t.phone[2].type)

for k,v in pairs(t.phone[1]) do
	print(k,v)
end
]]


---------------------------------------------python------------------------------------------

#! /usr/bin/python
import person_pb2

person = person_pb2.Person()
person.id = 1000
person.name = "Alice"
person.email = "[email protected]"
personMsg = person_pb2.Person()
"""
phone1 = person.Extensions[person_pb2.Phone.phones].add()
phone1.num = "2147483647"
phone1.type = person_pb2.Phone.HOME
phone2 = person.Extensions[person_pb2.Phone.phones].add()
phone2.num = "2147483647"
phone2.type = person_pb2.Phone.MOBILE
"""
for i in range(100000):
    data = person.SerializeToString()
    personMsg .ParseFromString(data)


相關推薦

(pbc lua 加入)c++_lua_Python with/without extension效能測試 (10SerializeToString & ParseFromString)

A. extension    c++: 0.259s    lua:6.136s    python: 15.874s     c++比 lua  -->23.6倍     lua比python -->2.58倍 B.without extension

效能測試】C\S架構的應用效能測試模型分析

1. CS/CSS系統架構的基本概念1.1系統架構定義雖然B/S結構、J2EE架構愈來愈成為流行模式,但基於傳統的C/S結構的應用程式還廣泛地應用於各種行業。尤其是金融行業中的商業銀行櫃面-核心帳務 系統等。一方面由於傳統商業銀行一般都有大量的字元終端等需要複用的裝置,一方面

C語言qsort函式演算法效能測試

對於演算法的複雜度,一種直觀感知方法是測量一定數量級資料的演算法執行時間。 以C語言提供的qsort為例子,以100萬資料量測試其計算時間,可感知O(nlg(n))的時間代價: C程式碼如下: #include <stdio.h> #include <st

B/S和C/S架構系統的效能測試有感

效能測試 系統一般為C/S架構或者B/S架構。不同架構的系統在進行測試(安全測試,效能測試等)的時候的側重點會有所不同。 - C/S又稱Client/Server(客戶/伺服器模式),伺服器採用高效能的PC,工作站或者小型機。客戶端需要安裝專門的

從三個語言(C++,Java,C#)的幾個效能測試案例來看效能優化

       隨著時間的發展,現在的虛擬機器技術越來越成熟了,在有些情況下,Java,.Net等虛擬機器密集計算的效能已經和C++相仿,在個別情況下,甚至還要更加優秀。本文詳細分析幾個效能測試案例,探討現象背後的原因。      

LuaC/C++ 交互系列:註冊枚舉enum到Lua Code中

mon size main 空間 log 方便 我們 .cpp lua 在Lua Code中註冊C/C++的枚舉很easy,就像註冊全局變量一樣。我們使用枚舉名稱作為命名空間,來避免註冊的枚舉發生沖突。註冊的枚舉存儲在全局環境(線程環境)中。 當在Lua Code中

LuaC的語法差別

his 固定 腳本語言 c/c++ 進行 != 意義 特殊 oca 沒有main函數 Lua是腳本語言,沒有固定入口的main函數。當lua解析器解析某個lua代碼文件時,lua解析器一樣一行的解析lua腳本。 print("Hello lua") 將以上代碼保存在a

luaC交互關鍵函數

const lua_next 素數 font con tab 成功 create 參數 1、lua_next(L, t_idx) 參數解釋: L:虛擬機 t_idx:table在棧中索引 返回 int:0執行失敗;非0執行成功

Using Microsoft Visual C++ DLLs with C++Builder

mic new acc reason cti mpi cno not work rom Using Microsoft Visual C++ DLLs with C++Builder As powerful as C++Builder is, the majority of

C++ class with pointer member(s)

get space 大致 gif 還需要 -a lin 清理 string 類 正如標題所示:這篇復習帶有指針類型成員的class 考慮到會有以下操作,來設計類 1 { 2 String s1(); 3 String s2("hello"); 4

Lua筆記——8.Lua & C

函數 程序 頭文件 c++中使用lua 之間 行數 ber amp class Lua是一門嵌入式語言,提供了完備的 C API 方便 Lua 代碼和其他宿主程序相互調用來擴展程序功能。在C中嵌入Lua腳本可以讓用戶在不重新編譯代碼的情況下只修改Lua代碼來更新程序。在Lu

LuaC的基礎互動

// // testLua.cpp // testLuaCall // // Created by ljw on 2018/9/26. // Copyright © 2018年 x. All rights reserved. // #pragma once #include "lua/l

lua原始碼學習(一)luac api外圍實現

工作後,整個人已經比較鬆懈了。儘管一直在看lua的原始碼。可是一直是比較零碎的時間,沒有系統的整理,所以還是收穫不多。由於近期工作也不是非常忙了,就想整理下lua的原始碼學習的筆記。加深下印象,並分享給大家。 先說下這系列bolg我會每週更新2-3篇,沒有順序的 這些文章

lua源代碼學習(一)luac api外圍實現

在操作 時間 struct ack cti 壓棧 c api field stat 工作後,整個人已經比較松懈了。盡管一直在看lua的源代碼。可是一直是比較零碎的時間,沒有系統的整理

Darknet: Open Source Neural Networks in C - Classifying With darknet19.weights Models

Darknet: Open Source Neural Networks in C - Classifying With darknet19.weights Models Darknet is an open source neural network framework written

csdn學習筆記:lua擴充套件c程式 c/c++訪問lua變數和函式

aa.lua teacher = "guilinwang"; org = "nzhsoft"; object = "lua"; age = 28; tab = { teacher = "guilinwang_tab", org = "nzhsoft_tab",

csdn學習筆記:luac/c++互動

lua使用一個虛擬棧來和c互傳值。棧上的每一個元素都是一個lua值 所有對棧的api查詢操作都不嚴格遵循棧的操作規則。而是可以用一個索引來指向棧上的任何元素;正的索引指的棧上的絕對位置(從1開始);負的索引則指從棧頂開始的偏移量。 展開來說,如果堆疊有n個元素,那麼索引1表示第一個元素(

csdn學習筆記:lua呼叫c/c++

無論何時lua呼叫c,被呼叫的函式都得到一個新的棧,這個棧獨立於c函式本身的棧,也獨立於之前的lua棧。它裡面包含了lua傳遞給c函式的所有引數,而c函式則把要返回的結果放入這個棧以返回個呼叫者 setglobal void lua_setglobal (lua_State *L, co

lua編寫C

本文參考 https://blog.csdn.net/zhang197093/article/details/76400871 我一直是喜歡將各種庫揉成一團放在一個可執行檔案裡。一個sh編譯出來。 但是我看到朋友都喜歡將不同功能的庫分別編譯成so,在lua中require。 我也

cocos2dx-lua呼叫C++

文參考:https://www.cnblogs.com/xiaonanxia/p/4987856.html 上面的文章是IOS版教程,用4部分說明原理,1部分說操作步驟。 這裡用window VS2013環境說操作步驟。   第五層:使用Cocos2d-x的方式來將C++類註冊進Lua環境