
Daniel
16.09.2016
08:50:05
И?

Vladislav
16.09.2016
08:50:40
но читабельность кода остается на уровне функция(переменная).метод()
а хотелось бы простоту из серии переменная.метод() для стандартных типов данных

Andrew
16.09.2016
08:51:22
а почему просто функцию не сделать?

Google

Vladislav
16.09.2016
08:52:42
ну потому что функционал как минимум - это работа с определенным типом данных
И?
ах да, самый не очень момент, это то, что в методе в начале мне приходиться конвертить входные данные из моего типа в станадртный, чтобы работать со стандартными функциями

Daniel
16.09.2016
08:55:32
Типа того. Но оптимизатор это оптимизирует

Vladislav
16.09.2016
08:56:29
это понятно, просто не логично, чтобы мне сделать метод для стандартного типа, приходиться делать кастыль ввиде промежуточного типа

Roman
16.09.2016
08:56:34

Phil
16.09.2016
08:59:09

Daniel
16.09.2016
08:59:14

Roman
16.09.2016
08:59:31

Daniel
16.09.2016
09:01:40
Чем лучше? Больше пространства для ошибок?

Roman
16.09.2016
09:02:39
Плюс, нет вот этой боли с setuid :)

Daniel
16.09.2016
09:03:30

Roman
16.09.2016
09:04:54

Google

Daniel
16.09.2016
09:05:16
Пока не падал

Roman
16.09.2016
09:06:39
Ну это пока :)

Daniel
16.09.2016
09:08:01
Ну - лет 15 уже ни разу ни в яве, ни в гошечке. Думаю - и не упадет уже

Anton
16.09.2016
09:10:41

Daniel
16.09.2016
09:11:27
На перле :)
Но он умер
Из явы и го - на го

Anton
16.09.2016
09:14:00

Roman
16.09.2016
09:14:12
Смотри: у меня процесс слушает сокет и делает accept(). Еще он слушает unix-сокет к которому подключены воркеры. Когда приходит клиент после accept() я отдаю fd воркеру. Если неуспех, то пробую другой воркер.

Daniel
16.09.2016
09:15:13
Да

Roman
16.09.2016
09:15:15
В такой схеме воркер может быть написан на чем угодно(как и мастер), воркеров легко шатдаунить

Daniel
16.09.2016
09:15:22
Да

Roman
16.09.2016
09:16:05
И балансить между воркерами можно по своему алгоритму

Daniel
16.09.2016
09:16:12
Да
В чем поинт?
А у меня вот в памяти кеш базы на 20 гигов. И мне актуально его пошарить между воркерами

Roman
16.09.2016
09:17:40

Daniel
16.09.2016
09:18:05
Ну или треды

Roman
16.09.2016
09:19:02
В чем поинт?
Не потерять ни одного запроса. Никаких прокси/балансеров(по крайней мере на уровне приложения)
Опять, же разные куски могут быть на разных языках.

Google

Daniel
16.09.2016
09:20:13
Айн райх, айн фольк, айн фюрер

Roman
16.09.2016
09:20:43
Ну или треды
Плохой вариант. С shm ты можешь еще и персистентность :)

Subbotin
16.09.2016
09:20:46
и этот фюрер - си.

Daniel
16.09.2016
09:21:27
Персистентность у меня в базе

Roman
16.09.2016
09:21:46

Daniel
16.09.2016
09:22:20

Плюшка
16.09.2016
09:23:16

Subbotin
16.09.2016
09:23:20
да все можно написать на си. говно вопрос. вопрос трудозатрат на разработку нужных функций.

Roman
16.09.2016
09:23:50

Zver
16.09.2016
09:28:25
Каждый воркер в отдельном процессе слишком накладно для системы. Больше ресурсов отьедается, временные расходы на взаимодействие между воркерами.

Roman
16.09.2016
09:32:06

Daniel
16.09.2016
09:32:41
Форк тут ничего не меняет

Roman
16.09.2016
09:32:48
Сисколл - где-то 38 нс

Daniel
16.09.2016
09:34:40
Да сколько той памяти, что шарится?.. слезы

Zver
16.09.2016
09:34:51

Roman
16.09.2016
09:34:59

Zver
16.09.2016
09:46:25
Это если пару процессов, то спички, а если сотни? Шарятся только исполнимый код, да и так по мелочи, а все остальное изолируется. Банально переключение процессов кучу времени отъедает. В одном приложении тот же кеш или другие общие данные можно держать в диком количестве, к которым будет быстрый доступ, и не нужно будет межпроцессного взаимодействия, на которое требуется заметно большее время. Если с теми же воркерами в процессах система начнет задыхаться с несколькими сотнями, то с зелеными потоками там тысячи, а то и миллионы(где-то попадалась такая инфа).


Roman
16.09.2016
09:59:07
Это если пару процессов, то спички, а если сотни? Шарятся только исполнимый код, да и так по мелочи, а все остальное изолируется. Банально переключение процессов кучу времени отъедает. В одном приложении тот же кеш или другие общие данные можно держать в диком количестве, к которым будет быстрый доступ, и не нужно будет межпроцессного взаимодействия, на которое требуется заметно большее время. Если с теми же воркерами в процессах система начнет задыхаться с несколькими сотнями, то с зелеными потоками там тысячи, а то и миллионы(где-то попадалась такая инфа).
>а если сотни?
зачем сотни? кстати, при больших числах процессы быстрее тредов )

Google

Roman
16.09.2016
09:59:12
Running test 'malloc' with 32 tasks
Threads 0.15 +/- 0.02 seconds
Processes 0.15 +/- 0.01 seconds
Running test 'readwrite' with 32 tasks
Threads 0.13 +/- 0.01 seconds
Processes 0.11 +/- 0.01 seconds

Oleh
16.09.2016
09:59:37
на каком языке тестил?

Roman
16.09.2016
09:59:42
Running test 'fstat' with 32 tasks
Threads 0.57 +/- 0.01 seconds
Processes 0.51 +/- 0.01 seconds
https://www.samba.org/~tridge/talks/threads.pdf

Zver
16.09.2016
10:01:21

Roman
16.09.2016
10:02:57
Это если пару процессов, то спички, а если сотни? Шарятся только исполнимый код, да и так по мелочи, а все остальное изолируется. Банально переключение процессов кучу времени отъедает. В одном приложении тот же кеш или другие общие данные можно держать в диком количестве, к которым будет быстрый доступ, и не нужно будет межпроцессного взаимодействия, на которое требуется заметно большее время. Если с теми же воркерами в процессах система начнет задыхаться с несколькими сотнями, то с зелеными потоками там тысячи, а то и миллионы(где-то попадалась такая инфа).
>В одном приложении тот же кеш или другие общие данные можно держать в диком количестве, к которым будет быстрый доступ, и не нужно будет межпроцессного взаимодействия
mmap жи. разьве что локи нужны будут, но с тредами та же беда.

Admin
ERROR: S client not available

Zver
16.09.2016
10:23:45
В мапе нативно хранить данные все равно не выйдет и придется их засовывать и извлекать.

Roman
16.09.2016
10:29:20

Oleh
16.09.2016
10:31:18
то как другие видят)

Roman
16.09.2016
10:34:04
Тут ничего сложного. Стивенс, "взаимодействие процессов"

Vladislav
16.09.2016
10:39:03
а как можно мэпы со структурой использовать, может кто мини пример привести?

Zver
16.09.2016
10:39:15

Vladislav
16.09.2016
10:39:23
я хочу по ключу string записывать два int значения
type Letters struct {
Count int
Rank int
}
var letter map[string]*Letters
пытаюсь вот так, но почему-то не взлетает...

Мерлин
16.09.2016
10:40:38

Google

Zver
16.09.2016
10:40:38
Должно.

Vladislav
16.09.2016
10:40:55
panic: runtime error: invalid memory address or nil pointer dereference
и да, я пытаюсь в функции это вернуть

Мерлин
16.09.2016
10:41:19

Zver
16.09.2016
10:41:27
Для маленьких структур не обязательно по ссылке.

Oleh
16.09.2016
10:41:43
через & ссылку создаешь?

Vladislav
16.09.2016
10:42:06

Zver
16.09.2016
10:42:26
Код в студию.
Создания мапа и заполнения.

Мерлин
16.09.2016
10:42:47

Vladislav
16.09.2016
10:43:05
func countlet(st string) map[string]*Letters {
let := make(map[string]*Letters)
for _, v := range st {
//let[strings.ToLower(string(v))] = int(v)
if (int(v) <= 1103 && int(v) >= 1072) || int(v) == 1105 {
let[strings.ToLower(string(v))].Count = let[strings.ToLower(string(v))].Count + 1
}
}
return let
}

Zver
16.09.2016
10:43:59
Это что за трешь?

Vladislav
16.09.2016
10:44:33
пытаюсь посчитать количество каждой буквы в строке

Мерлин
16.09.2016
10:44:44
У тебя для начала типы не совпадают
let[strings.ToLower(string(v))] = int(v)

Zver
16.09.2016
10:46:30
let[something] = &Leter{1,2}

Vladislav
16.09.2016
10:46:32

Мерлин
16.09.2016
10:47:08

Daniel
16.09.2016
10:47:11

Мерлин
16.09.2016
10:48:20
я должен сразу оба значения заполнять?
У тебя значение указателя по умолчанию nil
Ты сначала должен создать структуру, взять указатель на неё и положить в мапу
А лучше использовать не мапу указателей здесь, а мапу структур