gpt4 book ai didi

dart - dart vm-提高读取json和http通信的性能

转载 作者:行者123 更新时间:2023-12-03 03:47:00 26 4
gpt4 key购买 nike

我正在比较dart和nodejs。

我重写了nodeJs应用程序以解析并返回给HTTP客户端大量的json(约1000个对象)。出于测试目的,从文件中读取了json。然后将json解析为Map,转换为新的表示形式并响应客户端。

可在此处找到示例应用程序mapping json sample app

当我增加并发服务 call 的数量时,我注意到响应时间增加了。

这是10个并发线程处理40个请求的报告

document Length:        613480 bytes

Concurrency Level: 10
Time taken for tests: 9.079 seconds
Complete requests: 40
Failed requests: 0
Write errors: 0
Total transferred: 24542960 bytes
HTML transferred: 24539200 bytes
Requests per second: 4.41 [#/sec] (mean)
Time per request: 2269.770 [ms] (mean)
Time per request: 226.977 [ms] (mean, across all concurrent requests)
Transfer rate: 2639.89 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.8 0 5
Processing: 1250 2111 300.0 2126 2880
Waiting: 1024 1917 307.9 1948 2840
Total: 1255 2111 299.6 2126 2880

Percentage of the requests served within a certain time (ms)
50% 2126
66% 2213
75% 2233
80% 2243
90% 2446
95% 2865
98% 2880
99% 2880
100% 2880 (longest request)

注意如果仅使用2个并发线程,响应时间将如何减少
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 1
Processing: 279 447 140.9 415 1033
Waiting: 224 397 140.1 405 1000
Total: 279 447 140.9 415 1033

Percentage of the requests served within a certain time (ms)
50% 415
66% 422
75% 430
80% 434
90% 463
95% 1007
98% 1033
99% 1033
100% 1033 (longest request)

当只有一个客户时,它 super 快
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 1
Processing: 189 207 14.7 205 265
Waiting: 186 205 14.5 203 262
Total: 189 207 14.7 205 265

Percentage of the requests served within a certain time (ms)
50% 205
66% 209
75% 214
80% 217
90% 224
95% 240
98% 265
99% 265
100% 265 (longest request)

这是在同一数据和同一台机器上运行的节点的abc输出
Document Length:        807396 bytes

Concurrency Level: 10
Time taken for tests: 3.955 seconds
Complete requests: 40
Failed requests: 0
Write errors: 0
Total transferred: 32304320 bytes
HTML transferred: 32295840 bytes
Requests per second: 10.11 [#/sec] (mean)
Time per request: 988.661 [ms] (mean)
Time per request: 98.866 [ms] (mean, across all concurrent requests)
Transfer rate: 7977.25 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.5 0 3
Processing: 954 987 18.6 1000 1007
Waiting: 116 567 272.1 598 999
Total: 954 987 18.7 1001 1007

Percentage of the requests served within a certain time (ms)
50% 1001
66% 1004
75% 1004
80% 1004
90% 1005
95% 1005
98% 1007
99% 1007
100% 1007 (longest request)

我了解,如果我在事件队列中放置许多事件,则响应时间会增加。但是我希望dart使用微任务来更早地处理等待事件。

这是数据样本,结果数组始终包含1000个项目
{
"numFound": 1234,
"results": [
{
"cid": "id",
"cir": "id",
"cn": "name",
"cbr": "string",
"crn": "string",
"dep": "string",
"depid": "id",
"fn": "string",
"jvid": "id",
"loc": "string",
"pid": "id",
"date": int,
"toe": "string",
"ujn": "string",
"vn": "string",
"ind": "string",
"indid": "id",
"fun": "string",
"funid": "id",
"des": "string",
"date2": int,
"uuid": "string",
"elv": "string",
"elvid": "id",
"cfv": Array<Objects>
}
]
}

我正在使用centos 6.5(我已经建立了dart 1.2 sdk)。我与运行应用程序

perf record -g -- dart --generate_perf_events_symbols start.dart



这是“性能报告-调用图平面”显示的内容,但是我不确定如何解释输出以任何方式改进我的代码。
    75.86%  dart  [kernel.kallsyms]    [k] __do_softirq
+ 3.62% dart dart [.] dart::MarkingVisitor::VisitPointers(dart::RawObject**, dart::RawObject**)
+ 1.36% dart dart [.] dart::ScavengerVisitor::VisitPointers(dart::RawObject**, dart::RawObject**)
+ 1.02% dart dart [.] dart::GCSweeper::SweepPage(dart::HeapPage*, dart::FreeList*)
+ 0.96% dart perf-5465.map [.] *dart:core_StringBuffer_writeCharCode
+ 0.74% dart perf-5465.map [.] *dart:convert__Utf8Decoder@0xda80e0a_convert
+ 0.71% dart perf-5465.map [.] *dart:convert__JsonStringifier@0xda80e0a_escape
+ 0.57% dart perf-5465.map [.] *dart:convert__Utf8Encoder@0xda80e0a__fillBuffer@0xda80e0a
+ 0.55% dart libc-2.12.so [.] _wordcopy_fwd_aligned
0.53% dart [kernel.kallsyms] [k] retint_careful
+ 0.52% dart perf-5465.map [.] *dart:core_StringBuffer__addPart@0x36924d72
0.50% dart [kernel.kallsyms] [k] finish_task_switch
0.49% dart dart [.] dart::RawObject::VisitPointers(dart::ObjectPointerVisitor*)
0.41% dart [vsyscall] [.] 0x000000000000014c
0.38% dart libc-2.12.so [.] memmove
0.29% dart libpthread-2.12.so [.] pthread_getspecific
0.29% dart dart [.] dart::FreeList::TryAllocate(long, bool)
0.28% dart perf-5465.map [.] dart:core__List@0x36924d72__List@0x36924d72.
0.28% dart perf-5465.map [.] *dart:convert__JsonParser@0xda80e0a_parse
0.27% dart perf-5465.map [.] *dart:core_StringBuffer_write
0.27% dart perf-5465.map [.] *package:public-api/publicApi.dart_PostingResultMapper_mapPosting_mapPosting
0.27% dart [kernel.kallsyms] [k] _spin_unlock_irqrestore
0.27% dart dart [.] dart::String::Copy(dart::String const&, long, unsigned char const*, long)
0.27% dart dart [.] dart::VMHandles::AllocateHandle(dart::Isolate*)
0.26% dart perf-5465.map [.] *dart:collection__HashMap@0x23c35ea0&&_LinkedHashMapMixin@0x23c35ea0_forEach
0.25% dart perf-5465.map [.] *dart:convert__JsonStringifier@0xda80e0a_stringifyJsonValue
0.24% dart dart [.] dart::Object::Allocate(long, long, dart::Heap::Space)
0.24% dart perf-5465.map [.] dart:core__StringBase@0x36924d72_codeUnitAt
0.23% dart dart [.] dart::GCMarker::DrainMarkingStack(dart::Isolate*, dart::MarkingVisitor*)
0.22% dart dart [.] dart::ClassTable::UpdateLiveOld(long, long)
0.22% dart perf-5465.map [.] *dart:convert__JsonParser@0xda80e0a_parseString
0.21% dart perf-5465.map [.] *dart:convert__JsonParser@0xda80e0a_parseString
0.20% dart dart [.] dart::String::Copy(dart::String const&, long, dart::String const&, long, long)
0.17% dart dart [.] dart::OneByteString::ConcatAll(dart::Array const&, long, long, long, dart::Heap::Space)
0.16% dart [kernel.kallsyms] [k] __do_page_fault
0.16% dart dart [.] dart::BootstrapNatives::DN_StringBase_substringUnchecked(_Dart_NativeArguments*)
0.15% dart dart [.] dart::String::ConcatAllRange(dart::Array const&, long, long, dart::Heap::Space)
0.15% dart perf-5465.map [.] *dart:core_StringBuffer__consumeBuffer@0x36924d72
0.14% dart [kernel.kallsyms] [k] clear_page_c
0.13% dart perf-5465.map [.] _stub_OneArgCheckInlineCache
0.12% dart perf-5465.map [.] *dart:core__StringBase@0x36924d72_substring
0.11% dart dart [.] dart::String::Copy(dart::String const&, long, unsigned short const*, long)
0.11% dart perf-5465.map [.] *dart:collection__HashMap@0x23c35ea0&&_LinkedHashMapMixin@0x23c35ea0__addEntry@0x23c35ea0
0.11% dart dart [.] dart::String::SubString(dart::String const&, long, long, dart::Heap::Space)
0.11% dart dart [.] dart::FreeList::SplitElementAfterAndEnqueue(dart::FreeListElement*, long, bool)
0.10% dart [kernel.kallsyms] [k] get_page_from_freelist
0.10% dart dart [.] 0x000000000031b333
0.10% dart dart [.] dart::Scavenger::ProcessToSpace(dart::ScavengerVisitor*)
0.09% dart dart [.] dart::RawArray::VisitArrayPointers(dart::RawArray*, dart::ObjectPointerVisitor*)
0.09% dart dart [.] dart::ClassTable::UpdateAllocatedOld(long, long)
0.08% dart dart [.] dart::Profiler::RecordSampleInterruptCallback(dart::InterruptedThreadState const&, void*)
0.08% dart dart [.] dart::BootstrapNatives::DN_String_concatRange(_Dart_NativeArguments*)
0.08% dart perf-5465.map [.] *dart:convert__JsonStringifier@0xda80e0a_stringifyJsonValue_<anonymous closure>
0.07% dart perf-5465.map [.] _stub_TwoArgsCheckInlineCache
0.07% dart dart [.] dart::BootstrapNatives::DN_Object_getHash(_Dart_NativeArguments*)
0.07% dart perf-5465.map [.] *dart:core__Smi@0x36924d72_toString
0.07% dart perf-5465.map [.] dart:core__OneByteString@0x36924d72_get_hashCode
0.07% dart dart [.] dart::Instance::IsInstance() const
0.06% dart dart [.] dart::BootstrapNatives::DN_StringBuffer_createStringFromUint16Array(_Dart_NativeArguments*)
0.06% dart perf-5465.map [.] *dart:collection_Maps_mapToString
0.06% dart dart [.] dart::VMHandles::~VMHandles()
0.06% dart dart [.] dart::GCMarker::MarkObjects(dart::Isolate*, dart::PageSpace*, bool, bool)
0.06% dart dart [.] dart::PageSpace::TryAllocate(long, dart::HeapPage::PageType, dart::PageSpace::GrowthPolicy)
0.06% dart [kernel.kallsyms] [k] free_hot_cold_page
0.06% dart perf-5465.map [.] dart:core__StringBase@0x36924d72__substringUncheckedNative@0x36924d72
0.06% dart dart [.] dart::LoadOptimizer::Optimize()
0.06% dart dart [.] dart::Heap::AllocateNew(long)

最佳答案

我只想总结一下关于dart在vm上的行为的发现。直接询问后,事实证明转换是一个严重的问题。

最新版本已经对此进行了改进,并且也应该包含在下一个稳定版本中。

请检查这个错误https://code.google.com/p/dart/issues/detail?id=17659以及来自drt google group https://groups.google.com/a/dartlang.org/forum/#!topic/misc/S0rGeyc9aQU的对话本身

非常感谢Gunter,Anders和Greg在这里帮助我。

关于dart - dart vm-提高读取json和http通信的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22406610/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com