На допущениях того что трафик в приложении идет через локальное подключение можно довольно сильно оптимизировать свой сервер обработчик.
А еще это дополнительный оверхед. Так как юникс сокеты не бесплатны.
Думаю что не целесообразно тратить кучу времени на реализацию полноценного web сервера когда есть уже готовые и проверенные временем решения
Ну так я к чему и веду. Все это уже есть. Например, на яве в netty. Получается бросили кучу уисилий, написали велосипед и он всеравно будет медленней, чем готовые решения.
Ну джаве 3-й десяток лет пошел как никак :). Так что можно простить. Другое дело, что фикс довольно простой и сводится к банальной автозамене, если посмотреть коммиты.
Я встречал статьи, где говорилось про постоянные улучшения по скорости старта JVM, в то же время такие банальности оставили вне фокуса. Немножко странно.
Конечно, проблемы особой нету. Но sync это больше байткода, больше работы для JVM как ни крути. Пусть и речь о наносекундах. В общем случае — чем проще и меньше кода, тем лучше. Тем более когда эти sync блоки вообще не несут никакой пользы.
Ну я всегда ездил на метро. В одну сторону — 45 мин. 20 мин ходьбы до/от метро, 25 мин на метро. Но я еще счатливчик, я живу в 10 мин от метро и работа в 10 мин от метро. Но есть много людей, у которых машина — единственный вариант. Там ни чтения, ни ходьбы.
Это продуктивные занятия
Ну, как Вам сказать :). В метро всегда душно и пованивает. Когда я заходил в метро после спортзала еле мог дышать, так как мало кислорода и это прям чувствуется. То есть время в метро скорее во вред чем на пользу, даже если читаешь.
Тоже самое с офисом, если офис в центре — это мега загазованность и вред здоровью.
Работаю удаленно 2 года и управляю командой из 6 человек, таких же удаленщиков. До этого работал в офисах 10 лет. Пока все супер. Стараемся делать пивные сборы раз в полгода, чтобы не забыть лица друг друга :). Тратить 1-2 часа на «доехать» — непозволительная роскошь. Жизнь слишком коротка. В офисе, в целом, конечно получше было бы. Но время, которое тратится на доехать слишком дорого и не перевешывает плюшек от офиса.
Мне просто пришла идея, что если сделать отдельный сервер довольно мощным (заоптимизировать). Скажем чтобы он мог обрабатывать 10к рек-сек. Тогда проблем с балансировкой у Вас было бы поменьше.
Я 5 лет назад создавал подобную систему. Детали тут. Правда нам нужно было держать всего 11к рек-сек.
Последние две причины отличают его в лучшую сторону от Java.
Это мало от языка зависит. Больше от того что Вы в приложение добавляете. Джава отлично запускается одной строкой и не кушает память, если Вы знаете что делаете. Похоже, что Вы банально, кроме го, ничего не рассматривали больше.
смотреть глазами в отладчике
log.trace(packet.toUserFriendlyView());
математика у нас очень быстрая
Тем не менее в докладе говорится, что в питоне математика занимала 80% времени. Что-то тут не сходится.
А еще это дополнительный оверхед. Так как юникс сокеты не бесплатны.
Ну так я к чему и веду. Все это уже есть. Например, на яве в netty. Получается бросили кучу уисилий, написали велосипед и он всеравно будет медленней, чем готовые решения.
А что go не умеет ssl? Или у go биндинги на openSSL другие?
return a1 + a2 + a3;
.Может. Но в девятке пока все по прежнему.
Чтобы уменьшить стоимость железа? У нас, например, лоад в 10_000 рек-сек.
Тут я с вами согласен на 100%. Но нужно учитывать возраст явы. Легаси есть легаси, к сожалению.
Про проседание в 2 раза было бы интересно почитать.
Я встречал статьи, где говорилось про постоянные улучшения по скорости старта JVM, в то же время такие банальности оставили вне фокуса. Немножко странно.
Да, компилятор может удалять sync блоки, если может доказать что они не нужны. Но не факт, что это сработает/срабатывает именно на старте JVM.
num #instances #bytes class name
----------------------------------------------
1: 402 4903520 [I
2: 1621 158344 [C
3: 455 52056 java.lang.Class
4: 194 49728 [B
5: 1263 30312 java.lang.String
6: 515 26088 [Ljava.lang.Object;
7: 115 8280 java.lang.reflect.Field
8: 258 4128 java.lang.Integer
9: 94 3760 java.lang.ref.SoftReference
10: 116 3712 java.util.Hashtable$Entry
11: 126 3024 java.lang.StringBuilder
12: 8 3008 java.lang.Thread
13: 74 2576 [Ljava.lang.String;
14: 61 1952 java.io.File
15: 38 1824 sun.util.locale.LocaleObjectCache$CacheEntry
16: 12 1760 [Ljava.util.Hashtable$Entry;
17: 53 1696 java.util.concurrent.ConcurrentHashMap$Node
18: 23 1472 java.net.URL
19: 14 1120 [S
20: 2 1064 [Ljava.lang.invoke.MethodHandle;
21: 1 1040 [Ljava.lang.Integer;
22: 26 1040 java.io.ObjectStreamField
23: 12 1024 [Ljava.util.HashMap$Node;
24: 30 960 java.util.HashMap$Node
25: 20 800 sun.util.locale.BaseLocale$Key
26: 15 720 java.util.HashMap
27: 18 720 java.util.LinkedHashMap$Entry
28: 12 672 java.lang.Class$ReflectionData
29: 40 640 java.lang.Object
30: 19 608 java.util.Locale
31: 19 608 sun.util.locale.BaseLocale
32: 9 560 [Ljava.lang.reflect.Field;
33: 10 560 sun.misc.URLClassPath$JarLoader
34: 5 528 [Ljava.util.concurrent.ConcurrentHashMap$Node;
35: 21 504 java.net.Parts
36: 21 504 sun.security.action.GetPropertyAction
37: 6 480 java.lang.reflect.Constructor
38: 12 480 java.security.AccessControlContext
39: 20 480 java.util.Locale$LocaleKey
40: 18 432 java.io.ExpiringCache$Entry
41: 1 384 java.lang.ref.Finalizer$FinalizerThread
42: 6 384 java.nio.DirectByteBuffer
43: 6 384 java.util.concurrent.ConcurrentHashMap
44: 1 376 java.lang.ref.Reference$ReferenceHandler
45: 14 336 java.lang.StringBuffer
46: 6 336 java.nio.DirectLongBufferU
47: 10 320 java.lang.OutOfMemoryError
48: 10 288 [Ljava.io.ObjectStreamField;
49: 7 280 java.lang.ref.Finalizer
50: 11 264 sun.misc.URLClassPath$3
51: 14 256 [Ljava.lang.Class;
52: 3 240 [Ljava.util.WeakHashMap$Entry;
53: 10 240 sun.misc.MetaIndex
54: 7 224 java.lang.ref.ReferenceQueue
55: 7 224 java.util.Vector
56: 5 200 java.util.WeakHashMap$Entry
57: 6 192 java.io.FileDescriptor
58: 4 192 java.nio.HeapCharBuffer
59: 4 192 java.util.Hashtable
60: 2 176 java.lang.reflect.Method
61: 7 168 java.util.ArrayList
62: 3 168 sun.nio.cs.UTF_8$Encoder
63: 9 144 java.lang.ref.ReferenceQueue$Lock
64: 3 144 java.nio.HeapByteBuffer
65: 3 144 java.util.WeakHashMap
66: 6 144 sun.misc.PerfCounter
67: 2 128 java.io.ExpiringCache$1
68: 3 120 java.security.ProtectionDomain
69: 1 104 sun.net.www.protocol.file.FileURLConnection
70: 3 96 java.io.FileInputStream
71: 3 96 java.io.FileOutputStream
72: 2 96 java.lang.ThreadGroup
73: 3 96 java.security.CodeSource
74: 2 96 java.util.Properties
75: 3 96 java.util.Stack
76: 2 96 java.util.StringTokenizer
77: 1 96 sun.misc.Launcher$AppClassLoader
78: 2 96 sun.misc.URLClassPath
79: 2 96 sun.nio.cs.StreamEncoder
80: 4 96 sun.usagetracker.UsageTrackerClient$1
81: 1 88 sun.misc.Launcher$ExtClassLoader
82: 1 80 [Ljava.lang.ThreadLocal$ThreadLocalMap$Entry;
83: 2 80 [Ljava.net.URL;
84: 2 80 java.io.BufferedWriter
85: 2 80 java.io.ExpiringCache
86: 5 80 java.lang.Class$3
87: 2 80 sun.nio.cs.UTF_8$Decoder
88: 3 72 [Ljava.lang.reflect.Constructor;
89: 3 72 java.lang.Class$1
90: 3 72 java.lang.RuntimePermission
91: 3 72 java.util.Collections$SynchronizedSet
92: 3 72 java.util.concurrent.atomic.AtomicLong
93: 3 72 sun.misc.Signal
94: 3 72 sun.reflect.NativeConstructorAccessorImpl
95: 2 64 [Ljava.lang.Thread;
96: 2 64 java.io.FilePermission
97: 2 64 java.io.PrintStream
98: 2 64 java.lang.ClassValue$Entry
99: 2 64 java.lang.NoSuchMethodError
100: 2 64 java.lang.ThreadLocal$ThreadLocalMap$Entry
101: 2 64 java.lang.VirtualMachineError
102: 2 64 java.lang.ref.ReferenceQueue$Null
103: 1 48 [J
104: 2 48 [Ljava.io.File;
105: 2 48 [Ljava.lang.reflect.Method;
106: 3 48 [Ljava.security.Principal;
107: 2 48 java.io.BufferedOutputStream
Ну, как Вам сказать :). В метро всегда душно и пованивает. Когда я заходил в метро после спортзала еле мог дышать, так как мало кислорода и это прям чувствуется. То есть время в метро скорее во вред чем на пользу, даже если читаешь.
Тоже самое с офисом, если офис в центре — это мега загазованность и вред здоровью.
Я 5 лет назад создавал подобную систему. Детали тут. Правда нам нужно было держать всего 11к рек-сек.
~3 Мб.
Да, но математика от языка не зависит. Разве что ВЫ использовали какие-то специфиические функции из пакетов самого языка.
Это мало от языка зависит. Больше от того что Вы в приложение добавляете. Джава отлично запускается одной строкой и не кушает память, если Вы знаете что делаете. Похоже, что Вы банально, кроме го, ничего не рассматривали больше.
log.trace(packet.toUserFriendlyView());
Тем не менее в докладе говорится, что в питоне математика занимала 80% времени. Что-то тут не сходится.