@gogolang

Страница 1595 из 1630
i..
21.10.2018
12:45:45
Господа, нужно, что бы при запуске программы, если загрузка цп высокая, она ожидала снижения и только тогда исполнялась Чего то не получается примеров нагуглить, может кто ткнет?

Roman
21.10.2018
12:47:43
это неэффективно.

bits.OnesCount в помощь

Google
Aliaksandr
21.10.2018
12:48:34
вот так проще проверять: n & (n-1) == 0

https://play.golang.org/p/vq1NhsoxgnT

Vladimir
21.10.2018
12:52:22
https://play.golang.org/p/vq1NhsoxgnT
good!? Отличный вариант

Aliaksandr
21.10.2018
12:53:35
хотя вот так быстрее - https://play.golang.org/p/z3bVJO8z6Z8 .

Vladimir
21.10.2018
12:56:07
нет проверял через bitsOneCount проигрывает даже моему варианту , а твой первый выигрывает у моего

Roman
21.10.2018
13:00:08
хотя вот так быстрее - https://play.golang.org/p/z3bVJO8z6Z8 .
странно, твой вариант с битовыми операциями быстрее на amd64

Vladimir
21.10.2018
13:00:17
Ilya
21.10.2018
13:01:28
Кто-нибудь знает какой-то общий подход, чтобы результат выполнения горутин записался в определенном порядке?

Например, я их запускаю по-очереди и хочу, чтобы какое-то результирующее значение тоже писалось в канал по-очереди

Roman
21.10.2018
13:02:35
https://play.golang.org/p/of5oLLYVIBx

goos: linux goarch: arm64 BenchmarkIsStepen-4 30000000 41.7 ns/op BenchmarkIsPowerOfTwoPopCnt-4 1000000000 2.62 ns/op BenchmarkPowerOfTwo-4 1000000000 2.62 ns/op PASS

goos: linux goarch: amd64 BenchmarkIsStepen-4 200000000 7.92 ns/op BenchmarkIsPowerOfTwoPopCnt-4 2000000000 0.68 ns/op BenchmarkPowerOfTwo-4 2000000000 0.34 ns/op PASS

Vladimir
21.10.2018
13:06:01
убираю свое как не оптимальное?

Google
Vladimir
21.10.2018
13:06:20
себе в копилку Александра

Рома
21.10.2018
13:06:42
Ребят, подскажите по github. Был проект оригинальный, я его форкнул, сделал изменения, отправил pull request. Дальше я сделал еще изменения в моем форке и хочу отправить второй pull request как это сделать? И всё ли я правильно делаю

Subbotin
21.10.2018
13:07:54
Кто-нибудь знает какой-то общий подход, чтобы результат выполнения горутин записался в определенном порядке?
Сделать агрегатор, который блкирующе по очереди читает из каналов, куда пишут горутины

Ilya
21.10.2018
13:08:32
Subbotin
21.10.2018
13:08:46
Да

Ilya
21.10.2018
13:09:05
Тоже вариант, но я хотел как-то одним каналом обойтись, боюсь что много каналов слишком затратно по памяти

Но тоже вариант

Roman
21.10.2018
13:09:15
убираю свое как не оптимальное?
Вообще, popcnt есть почти везде и это инструкция исполняется 1 такт

i..
21.10.2018
13:09:18
man nice
Хочу эту работу внутри моего исполняемого файла делать, вне зависимости от среды

Ilya
21.10.2018
13:13:51
Куда записался?
Да куда угодно. Важно, чтобы в той же последовательности, что и вызов горутин

Хотя можно же на вызов горутины добавлять элемент в слайс и передавать его как замыкание

Vladimir
21.10.2018
13:14:43
Вообще, popcnt есть почти везде и это инструкция исполняется 1 такт
да на fasm писал когда не было поддержки этой инструкции , спасибо за информацию

пошел изучать math.bits

хотя из жизненного там только OnesCountХХ и LenXX , все равно еще раз пасибки

David
21.10.2018
13:36:17
Задача в чем?
Разбить прото файлы на более мелкие

Daniel
21.10.2018
14:19:08
Разбейте. Оно нагенерит go файлов по числу прото файлов

David
21.10.2018
14:19:57
Разбейте. Оно нагенерит go файлов по числу прото файлов
Как они будут потом подключать друг друга?

Google
Daniel
21.10.2018
14:21:19
Плохой вопрос

David
21.10.2018
14:24:14
Насколько я знаю, golang не может подключать пакеты по относительному пути (если находится по пути GOPATH'а). Когда разбиваются прото файлы на несколько и подключаю их в в других - пишет ошибку только для golang'a

Daniel
21.10.2018
14:24:15
Невозможно ответить

Зачем вам связанные прото разносить по директориям

Denys
21.10.2018
14:26:14
Насколько я знаю, golang не может подключать пакеты по относительному пути Может

import берет из GOPATH/src что угодно

будь то хоть "fuckyou/idiot"

David
21.10.2018
14:27:11
Зачем вам связанные прото разносить по директориям
Чисто для удобного добавления/удаления/редактирования в дальнейшем. Детальней можно прочитать что мне нужно здесь - https://stackoverflow.com/questions/52914402/compile-multiple-proto-files-into-single-file

Daniel
21.10.2018
14:29:01
Или они не связаны, или их нельзя редактировать отдельно

David
21.10.2018
14:32:31
Или они не связаны, или их нельзя редактировать отдельно
Немного не понял ответа. Есть сервис User (для работы с пользователями) - в котором есть entry (логин, регистрация) и info (информация о пользователе). Я хочу разбить эти две логики на более маленькие прото файлы, так как их будет намного (намного) больше

Daniel
21.10.2018
14:33:13
Зачем по разным директориям их разносить?

David
21.10.2018
14:33:24
Это все что нужно. Понимаю, что можно оставить все в одном файле user.proto, но очень не хотел бы это делать

Daniel
21.10.2018
14:33:54
Тогда оно все найдет и сгенерит

Доберусь до компа - пришлю пример

David
21.10.2018
14:34:37
Доберусь до компа - пришлю пример
Но, тем не менее, у меня оно пытается подключить. Буду весьма признателен

Roman
21.10.2018
15:15:23
в большинстве компаний скорее ситуция похожа на "стая гоферов бежит за человеком у которого в руках Python/Ruby/JavaScript" причём гоферы с копьями

hamper ?
21.10.2018
15:24:05
На сколько я понял, через WriteAt можно писать разные части файла одновременно, если они не пересекаются, а для этого дескриптор должен быть один? Например если я хочу параллельный аплоад файла кусками сделать, то надо сохранять дескриптор, что бы можно было в него писать? И как правильнее будет тогда записывать в файл, буферизировать в память кусками из входящего потока и через WriteAt писать или есть какой-то аналог io.Copy с возможностью указания с какого места писать?

hamper ?
21.10.2018
15:25:49
а зачем тебе несколько дескрипторов?
Ну допустим у меня приходит http запрос с куском файла и range например 100-200 и в это же время в другом хендлере в этот же файл пишется 0-99 кусок.

Google
Roman
21.10.2018
15:26:13
дескриптор он поумолчанию один и даётся тебе операционкой если я не ошибаюсь. Это по сути идентификатор, как указатель, его можно копировать сколько хочешь но указывать он будет на одно и то-же (aliasing)

hamper ?
21.10.2018
15:27:00
Ну да, но если я в двух хендлерах вызову os.OpenFile на один и тот же файл и буду в него писать разве это будет работать?

Roman
21.10.2018
15:27:23
Ну допустим у меня приходит http запрос с куском файла и range например 100-200 и в это же время в другом хендлере в этот же файл пишется 0-99 кусок.
можешь сделать так: 1. структуру менеджмента файлов, которая отвечает за открытие, закрытие и т.п. 2. структуру файла, которая отвечает за буферезацию и синхронизацию (мутекс для синхронизации и fd)

3. интерфейсы для работы с этими сущностями

hamper ?
21.10.2018
15:30:34
Ну примерно так и думал. А вот на счет записи через WriteAt есть какой-то способ не буферизовать в память? Вроде io.Copy напрямую как-то писать может...

Roman
21.10.2018
15:30:45
Ну да, но если я в двух хендлерах вызову os.OpenFile на один и тот же файл и буду в него писать разве это будет работать?
работать по сути должно, но это очевидный data race, хотя я не совсем уверен сможешь ли ты его вообще несколько раз открыть для записи (ведь по сути файловая система ОСи накладывает на fd lock, но если я не ошибаюсь лок ассоциируется с процессом, поэтому „по сути“ один и тот же процесс „по сути должен“ суметь открыть файл несколько раз (но я не уверен, нужно проверять, ибо тут ещё go runtime в игре между ОСью и кодом))

Roman
21.10.2018
15:32:21
но даже если и не открывать несколько раз - file descriptor это по факту указатель, если из нескольких горутин с файлом работать тогда очевидно нужна синхронизация

ошибаешься, ОС так не делают
ты уверен? надо конечно проверить, но я предполагаю что открыть из нескольких процессов один и тот же файл на запись - не получится, хотя…. хер его знает

Roman
21.10.2018
15:34:14
если просто делать open - как минимум на линуксе получится
ну эт на линуксе, а я мыслю кросс-платформенно, не охота же чтоб на одной ОСи софт работал эдак а на другой иначе?

Roman
21.10.2018
15:35:09
это твоя задача обеспечить синхронизацию
про синхронизацию то понятно) я так и написал, что синхронить самому

Vladimir
21.10.2018
15:35:21
Vladimir
21.10.2018
15:35:46
команда WriteAT не говорит о каких либо различных дескрипторах файла не придумываейте и множестеннных Open

Roman
21.10.2018
15:36:01
ну ОС за тебя это делать не факт что будет
нее, не синхронизацию, а защиту от открытия в экслюзивном режиме записи разными процессами

но я чес. гря. не уверен имеет ли go runtime тут какую-то прослойку при работе с файлами

hamper ?
21.10.2018
15:37:26
Думаю самым адекватным способом будет сделать один writer в файл с каналом, а из пришедших запросов читать куски и кидать в этот канал с указанием диапазона, по которому писать...

Google
Vladimir
21.10.2018
15:38:59
@Romshark если ты делаешь именно O_RDWR | O_EXCL - тогда да, на запись не откроешь еще, но это твоя задача так делать

Roman
21.10.2018
15:40:17
Думаю самым адекватным способом будет сделать один writer в файл с каналом, а из пришедших запросов читать куски и кидать в этот канал с указанием диапазона, по которому писать...
не люблю я каналы, честно говоря. Я бы обернул файл в структуру с fd и mutex’ом, описал методы и всё это дело обернул в интерфейсы

hamper ?
21.10.2018
15:40:31
Интересно, как сервисы, типа всяких вконтактиков аплоад делают, там как раз в несколько потоков файлы льются на сервер.

не люблю я каналы, честно говоря. Я бы обернул файл в структуру с fd и mutex’ом, описал методы и всё это дело обернул в интерфейсы
Там только наверное еще счетчик ссылок надо будет реализовывать свой, закрывать файл, когда не осталось потоков, пишущих в него.

hamper ?
21.10.2018
15:43:28
когда будете закрывать файл?
Когда все хендлеры перестанут в него писать. То есть в каждом хендлере инкремент счетчика и по defer декремент.

Vladimir
21.10.2018
15:44:15
hamper ?
21.10.2018
15:44:27
а когда хендлеры закончат?
Когда входящее соединение отдаст все, что принесло.

Для каждого из хендлеров.

Марк ☢
21.10.2018
15:44:46
а она есть
 If O_EXCL is set and O_CREAT is not set, the result is undefined.

hamper ?
21.10.2018
15:44:47
Если придет новый запрос, то снова открывать файл.

Марк ☢
21.10.2018
15:45:19
Дабл ять

Замеморимаппьте файл и пишите куда хотите

На 64 битах похер на размер же

Страница 1595 из 1630