Daniel,
On 24 Apr 2020, at 12:35, Daniel TurczaÅski <mail@danielturczanski.com> wrote:
Thanks. Are there any benchmarks available for Pharo HTTP servers? Is it possible to achieve a performance similar to node.js? I know the biggest selling point of Smalltalk is not perf but still I'm curious.
Benchmarking is a black art with many pitfalls. Let's say that Pharo HTTP performance is acceptable. Here is a test that I just ran (on a LXC/LXD container on a big production server). t3@t3-pharo-test:~/tmp/pharo9$ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=18.04 DISTRIB_CODENAME=bionic DISTRIB_DESCRIPTION="Ubuntu 18.04.4 LTS" t3@t3-pharo-test:~/tmp/pharo9$ curl get.pharo.org/64/90+vm | bash % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 3054 100 3054 0 0 198k 0 --:--:-- --:--:-- --:--:-- 198k Downloading the latest 90 Image: http://files.pharo.org/get-files/90/pharo64.zip Pharo.image Downloading the latest pharoVM: http://files.pharo.org/get-files/90/pharo64-linux-stable.zip pharo-vm/pharo Creating starter scripts pharo and pharo-ui t3@t3-pharo-test:~/tmp/pharo9$ ./pharo Pharo.image printVersion [version] 'Pharo9.0.0' 'Pharo-9.0.0+build.252.sha.fe2815c89f309789cbfba9a1ce821fb959dfe987 (64 Bit)' t3@t3-pharo-test:~/tmp/pharo9$ ./pharo Pharo.image eval --no-quit 'ZnServer startDefaultOn: 1701' & [1] 32203 a ZnManagingMultiThreadedServer(running 1701) t3@t3-pharo-test:~/tmp/pharo9$ curl http://localhost:1701/random 0BFE44ECF0BEEDDD949A8D5A363E5E6192A4B7CD4939E8BD7A7C7EC69995157 t3@t3-pharo-test:~/tmp/pharo9$ ab -k -n 1024 -c 8 http://localhost:1701/random This is ApacheBench, Version 2.3 <$Revision: 1807734 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking localhost (be patient) Completed 102 requests Completed 204 requests Completed 306 requests Completed 408 requests Completed 510 requests Completed 612 requests Completed 714 requests Completed 816 requests Completed 918 requests Completed 1020 requests Finished 1024 requests Server Software: Zinc Server Hostname: localhost Server Port: 1701 Document Path: /random Document Length: 64 bytes Concurrency Level: 8 Time taken for tests: 0.246 seconds Complete requests: 1024 Failed requests: 0 Keep-Alive requests: 1024 Total transferred: 256000 bytes HTML transferred: 65536 bytes Requests per second: 4155.22 [#/sec] (mean) Time per request: 1.925 [ms] (mean) Time per request: 0.241 [ms] (mean, across all concurrent requests) Transfer rate: 1014.46 [Kbytes/sec] received This is a small, do nothing request, tested locally, and so on. I would say it is safe to say you can handle 100s to 1000s of requests per second on a single Pharo instance (which is using only a single core). The good thing about HTTP is that you can normally scale horizontally by adding more and more worker instances under a load balancer -- these are standard techniques. HTH, Sven
The Concurrency book [1] says that Pharo's Process is like a fibre and is lightweight. How big is the stack? Java Quasar's fibers are very lightweight with a 400 byte stacks [2]. Can you have hundreds or thousands of processes running blocking IO without much memory and performance penalty?
[1] http://books.pharo.org/booklet-ConcurrentProgramming/ [2] https://docs.paralleluniverse.co/quasar/javadoc/co/paralleluniverse/fibers/F...
-- Sent from: http://forum.world.st/Pharo-Smalltalk-Users-f1310670.html