<?xml version="1.0" encoding="UTF-8"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" >

  <channel>
    <title><![CDATA[Статьи]]></title>
    <link>https://habr.com/ru/users/igoroutine/publications/articles/</link>
    <description><![CDATA[Хабр: статьи пользователя igoroutine]]></description>
    <language>ru</language>
    <managingEditor>editor@habr.com</managingEditor>
    <generator>habr.com</generator>
    <pubDate>Sat, 25 Apr 2026 09:28:12 GMT</pubDate>
    
    
      <image>
        <link>https://habr.com/ru/</link>
        <url>https://habrastorage.org/webt/ym/el/wk/ymelwk3zy1gawz4nkejl_-ammtc.png</url>
        <title>Хабр</title>
      </image>
    

    
      
        
    
    <item>
      <title><![CDATA[Особенности и ловушки модели памяти в Go: тайны синхронизации. Часть 2]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/oleg-bunin/articles/1014084/</guid>
      <link>https://habr.com/ru/companies/oleg-bunin/articles/1014084/?utm_campaign=1014084&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/b76/c7f/3b7/b76c7f3b72577a112624d0b2288a7228.png" /><p><em>Описание модели памяти Go начинается со слов «если вы читаете этот документ — вы излишне умный, остановитесь». Многие и правда остановились, но не автор этой статьи.&nbsp;</em></p><p>Привет, Хабр! Я — Игорь Панасюк, и это вторая часть материала по мотивам моего выступления на <a href="https://golangconf.ru/2025/abstracts/14242?utm_source=habr&amp;utm_medium=article&amp;utm_campaign=go&amp;utm_content=1014084">GolangConf</a>, где я рассказывал о модели памяти Go. В первой мы разобрались с&nbsp; отношением happens before, формализмом, посмотрели практические примеры и многое другое. Сегодня поговорим о линеаризуемости исполнения, барьерах памяти (можно ли опустить абстракцию модели памяти), гарантии для программ с data race и использовании продвинутых техник. </p> <a href="https://habr.com/ru/articles/1014084/?utm_campaign=1014084&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Wed, 22 Apr 2026 09:00:18 GMT</pubDate>
      <dc:creator><![CDATA[igoroutine (Конференции Олега Бунина (Онтико))]]></dc:creator>
      <category><![CDATA[Блог компании Конференции Олега Бунина (Онтико)]]></category><category><![CDATA[Программирование]]></category><category><![CDATA[Go]]></category><category><![CDATA[Конференции]]></category>
      <category><![CDATA[go]]></category><category><![CDATA[golang]]></category><category><![CDATA[golangconf]]></category><category><![CDATA[вопросы языкознани]]></category><category><![CDATA[многопоточное программирование]]></category><category><![CDATA[конференции]]></category><category><![CDATA[программирование]]></category><category><![CDATA[память]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Особенности и ловушки модели памяти в Go: тайны синхронизации. Часть 1]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/oleg-bunin/articles/1014080/</guid>
      <link>https://habr.com/ru/companies/oleg-bunin/articles/1014080/?utm_campaign=1014080&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/385/e0c/87b/385e0c87b95ffb692405c9f5ee4b86a4.png" /><p>Большинство программистов, работая с многопоточным кодом, осведомлены о примитивах синхронизации. При этом мало кто задумывается о существующей за этим сложной теории.</p><p>Привет, Хабр! Меня зовут Игорь Панасюк, я работаю в Яндекс. В этой статье по мотивам моего доклада для <a href="https://golangconf.ru/2025/abstracts/14242?utm_source=habr&amp;utm_medium=article&amp;utm_campaign=go&amp;utm_content=1014080">Golang Conf</a> я расскажу про Go Memory Model, понятным языком объясню отношение happens before, затрону формализм и разберу его на практических примерах.</p><p>Во второй части доклада мы поговорим про линеаризуемость, барьеры памяти, гонки и использование различных нетривиальных техник. &nbsp;Поехали!</p> <a href="https://habr.com/ru/articles/1014080/?utm_campaign=1014080&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Mon, 13 Apr 2026 09:00:44 GMT</pubDate>
      <dc:creator><![CDATA[igoroutine (Конференции Олега Бунина (Онтико))]]></dc:creator>
      <category><![CDATA[Блог компании Конференции Олега Бунина (Онтико)]]></category><category><![CDATA[Go]]></category><category><![CDATA[Программирование]]></category><category><![CDATA[Конференции]]></category>
      <category><![CDATA[go]]></category><category><![CDATA[golang]]></category><category><![CDATA[многопоточное программирование]]></category><category><![CDATA[конференции]]></category><category><![CDATA[память]]></category><category><![CDATA[Вопросы языкознания]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Часть 3. Векторизация на Go: CGo, транзакции, компиляторы, поддержка, байтовые инструкции]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/oleg-bunin/articles/905972/</guid>
      <link>https://habr.com/ru/companies/oleg-bunin/articles/905972/?utm_campaign=905972&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/335/415/075/335415075afcaaa70c916403717513f1.png" /><p><a href="https://habr.com/ru/companies/oleg-bunin/articles/905966/">В первой части статьи мы рассмотрели</a>, как можно вручную ускорить Go-код с помощью векторизации и SIMD-инструкций, реализованных через Go-ассемблер. Написали простую, но показательно быструю реализацию sliceContains и увидели, что даже базовая векторизация может дать ускорение в 10–14 раз по сравнению со стандартной реализацией.</p><p><a href="https://habr.com/ru/companies/oleg-bunin/articles/905968/">Во второй части статьи</a> погрузились в практическое применение SIMD в Go-ассемблере, реализовали функцию SliceContainsV1 и изучили, как с помощью VADD, VDUP и других инструкций можно добиться 10–14-кратного ускорения простых задач.</p><p>Но возможности оптимизации Go-программ на этом не заканчиваются. В этой части мы пойдём дальше: рассмотрим другие техники низкоуровневой оптимизации — от использования C-кода и альтернативных компиляторов с поддержкой векторизации до работы с аппаратными транзакциями памяти на Intel. Поговорим о том, как внедрять ассемблер в продакшен-код, не боясь за его поддержку, и как обойти ограничения стандартного Go-компилятора.</p><p>Привет, Хабр! Меня зовут Игорь Панасюк, я работаю в Яндекс, преподаю в ИТМО, а также в свободное время выступаю на конференциях, делюсь опытом в соцсетях и помогаю развитию Go-сообщества, веду телеграм-канал и youtube-канал. Если вы уже знакомы с базовыми техниками векторизации, эта часть поможет глубже понять, как устроены продвинутые способы ускорения Go-кода и на что стоит обратить внимание при работе с архитектурно-зависимыми оптимизациями.</p> <a href="https://habr.com/ru/articles/905972/?utm_campaign=905972&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 09 May 2025 09:40:53 GMT</pubDate>
      <dc:creator><![CDATA[igoroutine (Конференции Олега Бунина (Онтико))]]></dc:creator>
      <category><![CDATA[Блог компании Конференции Олега Бунина (Онтико)]]></category><category><![CDATA[Go]]></category><category><![CDATA[Assembler]]></category><category><![CDATA[C]]></category>
      <category><![CDATA[golang]]></category><category><![CDATA[optimizations]]></category><category><![CDATA[компилятор]]></category><category><![CDATA[gccgo]]></category><category><![CDATA[gollvm]]></category><category><![CDATA[ассемблер]]></category><category><![CDATA[word]]></category><category><![CDATA[byte]]></category><category><![CDATA[производительность]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Часть 2. Векторизация и SIMD в Go: ускорение поиска и сравнения в массивах]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/oleg-bunin/articles/905968/</guid>
      <link>https://habr.com/ru/companies/oleg-bunin/articles/905968/?utm_campaign=905968&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/dc6/a1f/8fb/dc6a1f8fbd540615f261441c416bec2e.png" /><p>Ускорить простые задачи, вроде поиска в массиве и сравнения слайсов, поможет мощь SIMD. Эти векторные инструкции, которые обрабатывают десятки байт данных за один такт процессора, отличная замена традиционным циклам. Во второй части статьи мы погружаемся глубже в практическое применение SIMD в Go-ассемблере, реализуем функцию SliceContainsV1 и изучим, как с помощью VADD, VDUP и других инструкций можно добиться 10–14-кратного ускорения простых задач.</p><p>Из этой статьи вы узнаете:</p><p><strong>•</strong>  Как устроено сравнение массивов с помощью SIMD-инструкций;</p><p><strong>•</strong>  Почему векторизация быстрее бинарного поиска;</p><p><strong>•</strong>  Как правильно работать с регистрами, фреймами и указателями в Go-ассемблере;</p><p><strong>•</strong>  Что нужно учесть при переносимости и поддержке низкоуровневого кода;</p><p><strong>•</strong>  Когда ассемблер оправдан и безопасен в реальных проектах на Go.</p><p>Информация будет актуальна как разработчикам, оптимизирующим критически важный код, так и тем, кто хочет глубже понять архитектуру выполнения и взаимодействие с «железом».</p><p><a href="https://habr.com/ru/companies/oleg-bunin/articles/905966/">В первой части статьи </a>мы разобрали саму идею ускорения кода на Go с помощью ассемблера. А в этой разберём её практическое применение.</p> <a href="https://habr.com/ru/articles/905968/?utm_campaign=905968&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Thu, 08 May 2025 10:30:40 GMT</pubDate>
      <dc:creator><![CDATA[igoroutine (Конференции Олега Бунина (Онтико))]]></dc:creator>
      <category><![CDATA[Блог компании Конференции Олега Бунина (Онтико)]]></category><category><![CDATA[Go]]></category><category><![CDATA[Assembler]]></category>
      <category><![CDATA[golang]]></category><category><![CDATA[optimization]]></category><category><![CDATA[intermediate representation]]></category><category><![CDATA[ассемблер]]></category><category><![CDATA[simd]]></category><category><![CDATA[VADD]]></category><category><![CDATA[VDUP]]></category><category><![CDATA[компилятор]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Часть 1. Почему Go-ассемблер и векторизация могут быть полезны: идея для ускорения]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/oleg-bunin/articles/905966/</guid>
      <link>https://habr.com/ru/companies/oleg-bunin/articles/905966/?utm_campaign=905966&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/b13/883/55d/b1388355de43e1b3b302d4c90a5d8c30.png" /><p>Когда речь заходит о производительности в Go, большинство разработчиков полагаются на стандартные библиотеки и встроенные инструменты оптимизации, но компилятор Go не всегда генерирует оптимальный машинный код. В таких случаях можно взять дело в свои руки и использовать ассемблерные инструкции для ускорения критически важных участков.</p><p>Ассемблер может показаться сложным и пугающим, но он открывает большие возможности для работы с низкоуровневыми оптимизациями. Готовы разобраться, как это работает? Тогда погнали!</p><p>Привет, Хабр! Меня зовут Игорь Панасюк, я работаю в Яндекс, преподаю в ИТМО, а также в свободное время выступаю на конференциях, делюсь опытом в соцсетях и помогаю развитию Go-сообщества.</p> <a href="https://habr.com/ru/articles/905966/?utm_campaign=905966&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Wed, 07 May 2025 09:02:06 GMT</pubDate>
      <dc:creator><![CDATA[igoroutine (Конференции Олега Бунина (Онтико))]]></dc:creator>
      <category><![CDATA[Блог компании Конференции Олега Бунина (Онтико)]]></category><category><![CDATA[Go]]></category><category><![CDATA[Assembler]]></category>
      <category><![CDATA[golang]]></category><category><![CDATA[optimization]]></category><category><![CDATA[intermediate representation]]></category><category><![CDATA[ssa]]></category><category><![CDATA[ассемблер]]></category><category><![CDATA[машинный код]]></category><category><![CDATA[simd]]></category><category><![CDATA[intrinsic]]></category><category><![CDATA[синтаксис]]></category><category><![CDATA[VMOV]]></category>
    </item>
  

  

  

	
  

  

  

      

      

      

    
  </channel>
</rss>
