Pull to refresh
55
8.7
Костя Д. @godzie

Пользователь

Send message

IO_URING. Часть 3

Reading time15 min
Views4.8K

Всем привет! Симулятор написания echo-server'ов на связи. Сегодня завершающая часть из цикла посвященного io_uring. В этом материале мы поговорим о настройке io_uring, режимах работы и перформансе. Полученные знания используем чтобы улучшить конкурента netpoller'у из предыдущей статьи. 

Читать далее
Total votes 14: ↑12 and ↓2+12
Comments2

IO_URING. Часть 2. Let's GO

Reading time12 min
Views6.7K

Всем привет! Продолжаем разбираться с io_uring. Сегодня попробуем использовать io_uring для решения прикладных задач. А именно напишем полноценный TCP сервер. Для этого мигрируем наши приложения с C на GO. Не буду писать длинные вступления, вперед экспериментировать!

Читать далее
Total votes 19: ↑17 and ↓2+17
Comments1

IO_URING. Часть 1. Введение

Reading time13 min
Views31K

Всем привет! Наверное, многие уже слышали о новом интерфейсе ядра Linux — io_uring. Это новый способ работы с асинхронным I/O (и не только) в Linux. Кстати, новый он не только из-за даты выхода в свет, но и в плане подходов, которые предлагает разработчику.

Заинтересовало? Более подробно разберемся под катом.

Читать далее
Total votes 29: ↑28 and ↓1+35
Comments37

Register-based calling convention, GO?

Reading time10 min
Views6.8K

Пока GO-сообщество томится в ожидании версии 1.18 и обещанных в ней дженериков язык продолжает развиваться и в других направлениях. В вышедшей недавно версии 1.17 хватает интересных нововведений. Среди них есть одно, давно ожидаемое, изменение — новый calling convention. Что же это такое, в чем отличие от старого соглашения о вызовах, какое влияние будет оказано на прикладную GO разработку? Постараемся разобраться в этой статье.
image

Читать дальше →
Total votes 14: ↑13 and ↓1+18
Comments5

О репозиториях замолвите слово

Reading time7 min
Views8.3K
image

В последнее время на хабре, и не только, можно наблюдать интерес GO сообщества к луковой/чистой архитектуре, энтерпрайз паттернам и прочему DDD. Читая статьи на данную тему и разбирая примеры кода, постоянно замечаю один момент — когда дело доходит до хранения сущностей предметной области — начинается изобретение своих велосипедов, которые зачастую еле едут. Код вроде бы состоит из набора паттернов: сущности, репозитории, value object’ы и так далее, но кажется, что они для того там “чтобы были”, а не для решения поставленных задач.
В данной статье я бы хотел не только показать, что, по моему мнению, не так с типичными DDD-примерами на GO, но также продемонстрировать собственную ORM для реализации персистентности доменных сущностей.

Читать дальше →
Total votes 6: ↑4 and ↓2+7
Comments27

GO Scheduler: теперь не кооперативный?

Reading time8 min
Views36K
Если вы читали release notes для версии GO 1.14, то возможно заметили несколько довольно интересных изменений в рантайме языка. Вот и меня очень заинтересовал пункт: «Goroutines are now asynchronously preemptible». Выходит что GO scheduler (планировщик) теперь не кооперативный? Что же, после прочтения по диагонали соответствующего proposal любопытство было удовлетворено.

Тем не менее, через некоторое время я решил более подробно исследовать нововведения. Результатами этих исследований и хотелось бы поделиться.

image
Читать дальше →
Total votes 46: ↑42 and ↓4+51
Comments9

PHP, GDB и массивы

Reading time5 min
Views6.6K
Зачем простому PHP разработчику может понадобится дебаг исходников? Ну например если он заметил какое-то не очевидное поведение и хочет разобраться в нем на максимально “низком” уровне. О таком интересном для меня поведение, а так же процессе “дебага сурсов” я и хотел бы поговорить.

Мотивация


Начнем с места в карьер, вот два похожих куска кода:

Раз
$arr = [];

for ($i =0; $i < 300; $i++)
{
  $arr[rand(1,1000)] = 1;
}
 
$sum = 0;
for ($i = 1001; $i < 200000000; $i++){
  if (array_key_exists($i, $arr)){
    $sum++;
  }
}


Два
$arr = [];

for ($i =0; $i < 300; $i++)
{
  $arr[rand(1,1000)] = 1;
}

sort($arr);
 
$sum = 0;
for ($i = 1001; $i < 200000000; $i++){
  if (array_key_exists($i, $arr)){
    $sum++;
  }
}


Разница между ними в том, что во втором случае мы отсортировали массив $arr, тем самым обновили ключи 0..count($arr)-1. А заинтересовал меня тот момент, что первый скрипт выполняется 6.0 секунд, тогда как второй 4.7 секунды. Получается около 20 процентов разницы.

Если Вы знакомы с внутренним устройством хэш-таблицы php, а так же с хэш функцией, то Вы или уже знаете ответ или можете без особого труда догадаться. Ну а для остальных я расскажу как настроить среду для дебага и выяснить в чем же дело.
Читать дальше →
Total votes 24: ↑23 and ↓1+22
Comments3

Information

Rating
644-th
Date of birth
Registered
Activity