Directories ¶
Path | Synopsis |
---|---|
lection_2
|
|
1_variables
многострочный комментарий переменные в golang
|
многострочный комментарий переменные в golang |
lection_3
|
|
8_package_func_doc/world
Package world документация ко всему пакету
|
Package world документация ко всему пакету |
lection_4
|
|
lection_5
|
|
1_simple
Запуск go рутин именованные функции или анонимные
|
Запуск go рутин именованные функции или анонимные |
2_shared_data
Go рутины, одновременно работающие с общими данными сами собой не могу синхронизироваться
|
Go рутины, одновременно работающие с общими данными сами собой не могу синхронизироваться |
3_chanels
Один из механизмов синхронизации - каналы Каналы, это объект через который можно обеспечить взаимодействие нескольких горутин В принимающей (или возвращающей) канал функции, можно указать направление работы с каналом Только для чтения - "<-chan" или только для записи "chan<-"
|
Один из механизмов синхронизации - каналы Каналы, это объект через который можно обеспечить взаимодействие нескольких горутин В принимающей (или возвращающей) канал функции, можно указать направление работы с каналом Только для чтения - "<-chan" или только для записи "chan<-" |
5_multiplexor
Иногда у вас есть несколько каналов, и вы хотите читать из любого из них В самом простом случае - можно сделать функцию, которая вернет значения из любого переданного канала
|
Иногда у вас есть несколько каналов, и вы хотите читать из любого из них В самом простом случае - можно сделать функцию, которая вернет значения из любого переданного канала |
6_select
Но гораздо проще объединять логику каналов через оператор select Он позволяет проверить на возможность операции с несколькими каналами сразу.
|
Но гораздо проще объединять логику каналов через оператор select Он позволяет проверить на возможность операции с несколькими каналами сразу. |
lection_6
|
|
10_race/atomic
Также, когда само общее значение - это просто число Можно использовать пакет atomic, для того, чтобы гарантировать очередность изменений объекта
|
Также, когда само общее значение - это просто число Можно использовать пакет atomic, для того, чтобы гарантировать очередность изменений объекта |
10_race/mutex
Go рутины, одновременно работающие с общими данными сами собой не могу синхронизироваться Как пример защиты данных от небезопасных изменений, можно использовать структуру Mutex У нее также нет публичных полей, но, есть два публичных метода Lock(), который даст только одной подпрограмме продолжить выполнение блока, остальне заблокируются в ожидании Unlock(), который снимает лок, захваченный ранее
|
Go рутины, одновременно работающие с общими данными сами собой не могу синхронизироваться Как пример защиты данных от небезопасных изменений, можно использовать структуру Mutex У нее также нет публичных полей, но, есть два публичных метода Lock(), который даст только одной подпрограмме продолжить выполнение блока, остальне заблокируются в ожидании Unlock(), который снимает лок, захваченный ранее |
11_workerpool
Более сложный пример, с использованием пула обработчиков для типовых задач
|
Более сложный пример, с использованием пула обработчиков для типовых задач |
8_deadlock
Если при запуске программы все go рутины окажутся в состоянии ожидания, runtime выкинет панику, с сообщением all goroutines are sleeping
|
Если при запуске программы все go рутины окажутся в состоянии ожидания, runtime выкинет панику, с сообщением all goroutines are sleeping |
9_cancel
Но, безопаснее использовать пакет sync, в частности структуру WaitGroup У нее нет публичных полей, но есть 3 метода Add увеличивает счетчик ожидаемых работ, Done декрементит, Wait - блокируется, пока внутренний счетчик не станет равным 0
|
Но, безопаснее использовать пакет sync, в частности структуру WaitGroup У нее нет публичных полей, но есть 3 метода Add увеличивает счетчик ожидаемых работ, Done декрементит, Wait - блокируется, пока внутренний счетчик не станет равным 0 |
scratch
|
|
Click to show internal directories.
Click to hide internal directories.