Что такое GO и зачем
его придумали?
Репушко Антон, 2016г.
Кто и зачем?
• Роб Пайк (Google) и другие
ребята из BellLabs
• Как С, только лучше
Где можно использовать
• Backend
• Сети
• Консоль
• Для душевного успокоения
Go tools + gofmt
• Переменные среды
• gofmt
• Структура директорий
Где работать
• Vim
• IntelliJ Idea
• Atom (VS Code) и т.д.
Где он уже используется
• Docker
• ITooLabs
• Vk notification
• Google
Что есть внутри
• Пакеты (packages).
• bool, byte (не char 8б), rune (char 32б), int(32б), int8,
int16, int32, int64, uint и т.д., float32, float64, complex,
complex64, complex128. Все это находится в пакете
builtin (подключается неявно).
• Функции
• Приведение типов
• Struct и Interface
Процессы, треды и
горутины
Процессы, треды и
горутины
• Отправка и прием сообщения через канал
• go (инициализация новой рутины)
• Блокирующие системные вызовы (сеть/файлы)
• Остановка для GC
Goroutines
• Теория взаимодействующих последовательных
процессов Хоара (CSP)
• Изначально она занимает 2K (внутри стек. Если
нужно больше памяти - он переаллоцируется).
• Можно создавать очень много goroutines. Очень.
• Для передачи информации используются каналы.
Планировщик
• Есть 3 модели нарезки пользовательских потоков
в потоки ядра операционной системы:

1) N:1 (быстрое переключение контекста, но не
использует возможности многоядерных систем)

2) 1:1 (медленное переключение контекста, но
использует все ядра)

3) M:N (быстрое переключение контекста и
использует все ядра)
Планировщик
• M - поток ОС, G - goroutine,
P - планировщик контекста
• Серенькие G - очереди
исполнения (runqueues) и
есть глобальная очередь
исполнения
• Из-за этих самых
контекстов все потоки у
нас - «зеленые»
Планировщик
• Это не работает при:

1) Системном вызове

2) Когда у планировщика кончаются задачи
(заимствование работы)
+/-
• Goroutines
• Простота
• Прозрачность
• нет ООП как
такового
• нет автоматического
приведения типов
• ограниченность
сфер применения
Конец
Спасибо за внимание! Готов выслушать
ваши вопросы

email: repushko.a@gmail.com

Go

  • 1.
    Что такое GOи зачем его придумали? Репушко Антон, 2016г.
  • 2.
    Кто и зачем? •Роб Пайк (Google) и другие ребята из BellLabs • Как С, только лучше
  • 3.
    Где можно использовать •Backend • Сети • Консоль • Для душевного успокоения
  • 4.
    Go tools +gofmt • Переменные среды • gofmt • Структура директорий
  • 5.
    Где работать • Vim •IntelliJ Idea • Atom (VS Code) и т.д.
  • 6.
    Где он ужеиспользуется • Docker • ITooLabs • Vk notification • Google
  • 7.
    Что есть внутри •Пакеты (packages). • bool, byte (не char 8б), rune (char 32б), int(32б), int8, int16, int32, int64, uint и т.д., float32, float64, complex, complex64, complex128. Все это находится в пакете builtin (подключается неявно). • Функции • Приведение типов • Struct и Interface
  • 8.
  • 9.
    Процессы, треды и горутины •Отправка и прием сообщения через канал • go (инициализация новой рутины) • Блокирующие системные вызовы (сеть/файлы) • Остановка для GC
  • 10.
    Goroutines • Теория взаимодействующихпоследовательных процессов Хоара (CSP) • Изначально она занимает 2K (внутри стек. Если нужно больше памяти - он переаллоцируется). • Можно создавать очень много goroutines. Очень. • Для передачи информации используются каналы.
  • 11.
    Планировщик • Есть 3модели нарезки пользовательских потоков в потоки ядра операционной системы:
 1) N:1 (быстрое переключение контекста, но не использует возможности многоядерных систем)
 2) 1:1 (медленное переключение контекста, но использует все ядра)
 3) M:N (быстрое переключение контекста и использует все ядра)
  • 12.
    Планировщик • M -поток ОС, G - goroutine, P - планировщик контекста • Серенькие G - очереди исполнения (runqueues) и есть глобальная очередь исполнения • Из-за этих самых контекстов все потоки у нас - «зеленые»
  • 13.
    Планировщик • Это неработает при:
 1) Системном вызове
 2) Когда у планировщика кончаются задачи (заимствование работы)
  • 14.
    +/- • Goroutines • Простота •Прозрачность • нет ООП как такового • нет автоматического приведения типов • ограниченность сфер применения
  • 15.
    Конец Спасибо за внимание!Готов выслушать ваши вопросы
 email: repushko.a@gmail.com