Vergleich der Deserialisierungsleistung von msgpack (C ++ / Python / Ruby)

Ich habe die Leseleistung mit jeder msgpack-Bibliothek in C ++, Python und Ruby untersucht. Ich habe nicht nach Strenge gefragt, aber ich wollte ein grobes Gefühl für die Leistung bekommen, also habe ich keine Feinabstimmungen vorgenommen. Das Folgende ist die Leistung beim Lesen von 10.000.000 Nachrichten mit Standardeingabe.

Umgebung user time sys time total performance
C++ (Apple LLVM version 6.1.0 (clang-602.0.53) + msgpack-c 1.2.0) 6.13s 1.38s 7.649 1,307,360.43 msg/sec
Python (Python 2.7.6 +,msgpack-python 0.4.6) 17.50s 1.62s 20.561 486,357.66 msg/sec
Ruby (2.2.2p95 (2015-04-13 revision 50295) [x86_64-darwin14] + msgpack-ruby 0.6.2) 26.67s 0.95s 27.729 360,633.27 msg/sec

Unten sind die Details.

Messumgebung

Messmethode

Code zur Messung verwendet

C++

#include <msgpack.hpp>
#include <sys/types.h>
#include <sys/uio.h>
#include <unistd.h>
#include <time.h>

int main(int argc, char *argv[]) {
  static const size_t BUFSIZE = 4096;
  msgpack::unpacker unpkr;
  int rc;
  int array_count = 0;
  
  char buf[BUFSIZE];

  while (0 < (rc = read(0, buf, sizeof(buf)))) {
    unpkr.reserve_buffer(rc);
    memcpy(unpkr.buffer(), buf, rc);
    unpkr.buffer_consumed(rc);

    msgpack::unpacked result;
    while (unpkr.next(&result)) {
      const msgpack::object &obj = result.get();
      if (obj.type == msgpack::type::ARRAY) {
        array_count++;
      }
      result.zone().reset();
    }
  }
  printf("%d\n", array_count);

  return 0;
}

Python

#!/usr/bin/env python

import msgpack
import sys

array_count = 0
for msg in msgpack.Unpacker(sys.stdin):
    if isinstance(msg, list): array_count += 1

print array_count

Ruby

#!/usr/bin/env ruby

require 'msgpack'

array_count = 0

unpkr = MessagePack::Unpacker.new(STDIN)
unpkr.each do |msg|
  if msg.instance_of? Array
    array_count += 1
  end
end

puts array_count

Recommended Posts

Vergleich der Deserialisierungsleistung von msgpack (C ++ / Python / Ruby)
Geschwindigkeitsvergleich von Python, Java, C ++
Grundlegender Grammatikvergleich in fünf Sprachen (C #, Java, Python, Ruby, Kotlin)
Mehrstufige Auswahl (Go / C # / Ruby / Python)
Rufen Sie popcount von Ruby / Python / C # auf
4-Sprachen-Vergleich des Abschlusses (Python, JavaScript, Java, C ++)
Großer Unterschied in der Leistung von Ruby, Python und httpd
Erster Python 3 ~ Erster Vergleich ~
Leistungsvergleich des Gesichtsdetektors mit Python + OpenCV
Python C ++ Notizen
Python, openFrameworks (c ++)
paiza POH ec-Kampagne (C # / Java / Python / Ruby) # paizahack_01
Vergleich von Python und Ruby (Environment / Grammar / Literal Edition)
[Ruby vs Python] Benchmark-Vergleich zwischen Rails und Flask
Vergleich von CoffeeScript mit JavaScript-, Python- und Ruby-Grammatik
Vergleich der Ausführungszeit von Python SDP
Python C / C ++ - Erweiterungsmusterzeiger
Ruby, Python und Map
Weiter Python in C-Sprache
Python und Ruby teilen sich
Python Package Manager-Vergleich
C-API in Python 3
ABC147 C --HonestOrUnkind2 [Python]
Lösen mit Ruby und Python AtCoder ARC 059 C Minimum-Quadrat-Methode
Leistungsvergleich des Python-Webframeworks (Django, Flask, Responder, FastAPI, Japronto)
Mandelbrot-Benchmark (C, PHP, HHVM, Ruby, Python, PyPy und Kinx)
Lösen mit Ruby und Python AtCoder ABC011 C Dynamische Planungsmethode
Lösen mit Ruby und Python AtCoder ARC067 C Primfaktorisierung
AtCoder ABC151 Problem D Geschwindigkeitsvergleich in C ++ / Python / PyPy
Ruby vs Python Performance. Wie wählt man die richtige Technologie aus?