не знаю - по сравнению с испльзованием fiber-ов, сильно ли лучше будет производительность? Да, вы сэкономите на переключениях контекста, но это всего пара десятков инструкций и на выделении стека для каждого fiber-а - но стек скорее всего достаточно выделять небольшой.
int client_fd = accept4(socket_fd, nullptr, nullptr, SOCK_NONBLOCK);
Сокет для общения с клиентом создается неблокирующий. Поэтому, если всё записать нельзя, записывается часть, и поток снова ждёт возможности записи.
poll используется не для одного fd. Он используется для fd, на котором сервер принимает новые соединения и на fd клиентов. Но если клиентов нет, то да, fd будет один.
Читайте в начале статьи - никакого жизнеспособного решения здесь не предлагается. Предлагается рассмотреть принципы, которые используются для реализации такой функциональности в больших и сложных библиотеках типа boost, код которых читать трудно.
Скажу, что функция example принимает threshold на регистре %rdx; выделяет память на куче размером с то, что захватывает лямбда функция, копирует туда этот threshold, после чего передаёт в for_each на регистрах ваш массив, его размер, указатель на эту структуру с захваченным и указатель на код лямбда функции.
Лямбда функция первым параметром получает указатель на структуру с захваченным, вторым - собственный аргумент.
По сути, это подход с виртуальными классами, только указатель на код функции кладётся не в структуру с захваченными переменными, а отдельно.
What I meant is that lambda function that captures something from the outside, can`t be compiled to a function, because in terms of the language, as you said, it is an object that own other objects.
As for the struct, I feel like this is more of an imaginary construct - you won`t see the compiler generate a constructor or a destructor for it or really pass it to another function - as it seems to always inline it.
А у меня что-то получается, что при удалении строк страницы индекса не освобождаются.
Я создал таблицу, у которой единственный индекс - primary key (id). Вставил туда элементов, потом много раз сделал так: вставляю 10000 новых строк, потом удаляю 10000 строк с минимальными id. Размер индекса всё это время рос.
Потом я удалил всё из таблицы, запустил vacuum - индекс не уменьшился.
Потом для верности ещё сделал "vacuum (index_cleanup ON) ids;" - то же самое
Возможно, страницы индекса удаляются, когда они находятся в конце файла, а тут они в начале получаются?
Register-based calling convention, GO?
Остаётся вопрос - а почему сразу так не сделали?
PostgreSQL под капотом. Часть 1. Цикл сервера
select - это не просто функция. Это системный вызов Linux, и на Windows должно происходить что-то другое.
Кроме того, это устаревший системный вызов, странно что он используется.
Как мы придумали и запустили совместные поездки в Яндекс Go
А почему никто никогда не упоминает, что такой тариф был короткое время года 3-4 назад для поездок из аэропорта Домодедово?
Mojo: Python-совместимый язык с производительностью Си — от Криса Лэттнера
Получается, если вы завели вектор интов, использовать цикл вроде for elem in vec:
Будет нежелательно?
Mojo: Python-совместимый язык с производительностью Си — от Криса Лэттнера
При этом Type Specialisation вы должны сами написать вариант вашего класса для примитивного типа, или компилятор сможет сам?
Mojo: Python-совместимый язык с производительностью Си — от Криса Лэттнера
А почему они тогда не добавили int, который всегда примитивный?
Разбираемся с использованием неблокируещего ввода-вывода в ОС Linux. Пишем пример сервера на голых системных вызовах
не знаю - по сравнению с испльзованием fiber-ов, сильно ли лучше будет производительность? Да, вы сэкономите на переключениях контекста, но это всего пара десятков инструкций и на выделении стека для каждого fiber-а - но стек скорее всего достаточно выделять небольшой.
Разбираемся с использованием неблокируещего ввода-вывода в ОС Linux. Пишем пример сервера на голых системных вызовах
Потому что процессу в принципе не получится открыть больше чем RLIMIT_NOFILE дескрипторов
Разбираемся с использованием неблокируещего ввода-вывода в ОС Linux. Пишем пример сервера на голых системных вызовах
Мне кажется, что с асинхронным вводом-выводом код чего либо сложнее такого echo сервера будет нечитаем.
Разбираемся с использованием неблокируещего ввода-вывода в ОС Linux. Пишем пример сервера на голых системных вызовах
int client_fd = accept4(socket_fd, nullptr, nullptr, SOCK_NONBLOCK);
Сокет для общения с клиентом создается неблокирующий. Поэтому, если всё записать нельзя, записывается часть, и поток снова ждёт возможности записи.
poll используется не для одного fd. Он используется для fd, на котором сервер принимает новые соединения и на fd клиентов. Но если клиентов нет, то да, fd будет один.
Разбираемся с использованием неблокируещего ввода-вывода в ОС Linux. Пишем пример сервера на голых системных вызовах
Читайте в начале статьи - никакого жизнеспособного решения здесь не предлагается. Предлагается рассмотреть принципы, которые используются для реализации такой функциональности в больших и сложных библиотеках типа boost, код которых читать трудно.
О разнице между лямбдами и обычными функциями и о имплементации лямбд в некторых языках программирования
Я немного подумал, и у меня получился такой код, довольно тривиальный (не хватает конструкторов, но в общем оно работает):
код
Но в STL написан код без чего-либо виртуального, поэтому непонятно - там написано что-то принципиально другое или примерно то же.
О разнице между лямбдами и обычными функциями и о имплементации лямбд в некторых языках программирования
Ну если знаете, то расскажите, если не трудно. Не какой у него интерфейс, а как он внутри сохраняет функцию и как вызывает её
О разнице между лямбдами и обычными функциями и о имплементации лямбд в некторых языках программирования
А вы сами знаете, как std::function устроен?
О разнице между лямбдами и обычными функциями и о имплементации лямбд в некторых языках программирования
Ну это тоже самое, только память выделяется на стеке
О разнице между лямбдами и обычными функциями и о имплементации лямбд в некторых языках программирования
Скажу, что функция example принимает threshold на регистре %rdx; выделяет память на куче размером с то, что захватывает лямбда функция, копирует туда этот threshold, после чего передаёт в for_each на регистрах ваш массив, его размер, указатель на эту структуру с захваченным и указатель на код лямбда функции.
Лямбда функция первым параметром получает указатель на структуру с захваченным, вторым - собственный аргумент.
По сути, это подход с виртуальными классами, только указатель на код функции кладётся не в структуру с захваченными переменными, а отдельно.
О разнице между лямбдами и обычными функциями и о имплементации лямбд в некторых языках программирования
спасибо. Я постараюсь дополнить статью с учётом этого.
On the difference between regular functions and Lambdas
What I meant is that lambda function that captures something from the outside, can`t be compiled to a function, because in terms of the language, as you said, it is an object that own other objects.
As for the struct, I feel like this is more of an imaginary construct - you won`t see the compiler generate a constructor or a destructor for it or really pass it to another function - as it seems to always inline it.
Как снимали первую Матрицу и в чём её феномен
Мне фильм каким-то скучным показался. Вроде завязка интересная, а потом всё скатывается в сплошные бои.
Индексы в PostgreSQL — 4
А у меня что-то получается, что при удалении строк страницы индекса не освобождаются.
Я создал таблицу, у которой единственный индекс - primary key (id). Вставил туда элементов, потом много раз сделал так: вставляю 10000 новых строк, потом удаляю 10000 строк с минимальными id. Размер индекса всё это время рос.
Потом я удалил всё из таблицы, запустил vacuum - индекс не уменьшился.
Потом для верности ещё сделал "vacuum (index_cleanup ON) ids;" - то же самое
Возможно, страницы индекса удаляются, когда они находятся в конце файла, а тут они в начале получаются?