~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 58B39F60CD8A372D2E26246A55ECEE34__1716055440 ✰
Заголовок документа оригинал.:
✰ Channel (programming) - Wikipedia ✰
Заголовок документа перевод.:
✰ Канал (программирование) — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Channel_(programming) ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/58/34/58b39f60cd8a372d2e26246a55ecee34.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/58/34/58b39f60cd8a372d2e26246a55ecee34__translat.html ✰
Дата и время сохранения документа:
✰ 22.06.2024 17:03:38 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 18 May 2024, at 21:04 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Канал (программирование) — Википедия Jump to content

Канал (программирование)

Из Википедии, бесплатной энциклопедии

В вычислениях канал — это модель межпроцессного взаимодействия и синхронизации посредством передачи сообщений . Сообщение может быть отправлено по каналу, а другой процесс или поток может получать сообщения, отправленные по каналу, на который он имеет ссылку , в виде потока . Различные реализации каналов могут быть с буферизацией или без нее, а также быть синхронными или асинхронными.

каналы libthread [ править ]

Многопоточная libthread библиотека , впервые созданная для операционной системы Plan 9 , предлагает межпоточную связь на основе каналов фиксированного размера.

События OCaml [ править ]

Модуль событий OCaml предлагает типизированные каналы для синхронизации. Когда вызываются функции отправки и получения модуля, они создают соответствующие события отправки и получения, которые можно синхронизировать.

Примеры [ править ]

Луа Love2D [ править ]

Библиотека Love2D , использующая язык программирования Lua , реализует каналы с операциями push и pop, аналогичными стекам. Операция извлечения будет заблокирована до тех пор, пока в стеке находятся данные. Операция запроса эквивалентна операции pop, за исключением того, что она блокируется до тех пор, пока в стеке не появятся данные.

-- Строка, содержащая код, который будет интерпретироваться такой функцией, как loadstring(), 
 -- но на стороне C для запуска собственного потока. 

  local   threadCode   =   [[ 
 love.thread.getChannel("test"):push("Hello world!") 
 ]] 


 function   love  .   load  () 
     -- Запускаем поток. 
    
      нить   =   любовь  .   нить  .   newThread  (  threadCode  ) 
     thread  :  start  () 
    
     — поток будет заблокирован до тех пор, пока не будет получено сообщение «Hello world!»   извлекается из стека теста канала. 
      -- Поскольку канал может быть извлечен до первого выполнения потока, в стеке может не оказаться данных. 
      -- в этом случае используйте :demand() вместо :pop(), потому что :demand() будет блокироваться до тех пор, пока в стеке не появятся данные, а затем вернет данные. 
    
      print  (  love  .  thread  .  getChannel  (  «test»  )):  требование  ()) 
    
     — Теперь поток может завершиться. 
  конец 

XMOS XC [ править ]

Язык XMOS программирования XC предоставляет примитивный тип «chan» и два оператора «<:» и «:>» для отправки и получения данных из канала. [1]

В этом примере на XMOS запускаются два аппаратных потока, выполняющие две строки в блоке «par». Первая строка передает по каналу число 42, а вторая ждет его получения и устанавливает значение x. Язык XC также позволяет асинхронный прием по каналам с помощью оператора выбора.

чан   с  ; 
  ты   х  ; 
  пара   { 
   c   <:   42  ; 
    с   :>   х  ; 
  } 

Иди [ править ]

Этот фрагмент кода Go работает аналогично коду XC. Сначала создается канал c, затем запускается горутина, которая отправляет 42 через канал. Когда число помещается в канал, x устанавливается равным 42. Go позволяет каналам буферизировать содержимое, а также неблокировать прием за счет использования блока выбора. [2]

c   :=   make  (  chan   int  ) 

 go   func  ()   {  c   <-   42  }() 

 x   :=   <-   c 

Ржавчина [ править ]

Rust предоставляет асинхронные каналы для связи между потоками. Каналы обеспечивают однонаправленный поток информации между двумя конечными точками: Sender и Receiver. [3]

используйте   std  ::  sync  ::  mpsc  ; 
  используйте   std  ::  thread  ; 

  fn   main  ()   { 
     let   (  tx  ,   rx  )   =   mpsc  ::  channel  (); 

      поток  ::  spawn  (  move   ||   { 
         tx  .  send  (  123  ).  unwrap  (); 
     }); 

      пусть   результат   =   rx  .   получение  (); 
      распечататьлн!   (  "{:?}"  ,   результат  ); 
  } 

Приложения [ править ]

В дополнение к их фундаментальному использованию для межпроцессного взаимодействия, каналы могут использоваться в качестве примитива для реализации различных других конструкций параллельного программирования, которые могут быть реализованы в виде потоков. Например, каналы можно использовать для построения фьючерсов и промисов , где фьючерс — это одноэлементный канал, а промис — это процесс, который отправляет данные в канал, исполняя будущее. [4] Аналогично, итераторы могут быть созданы непосредственно из каналов. [5]

Список реализаций [ править ]

  • Список нестандартных реализаций каналов на основе библиотек
  • Для Скалы:
    • CSO — взаимодействие объектов Scala [6] представляет собой полноценный DSL для канальной связи и параллельного выполнения, чьи семантические примитивы являются обобщением примитивов OCCAM. CSO используется с 2007 года при преподавании параллельного программирования, и соответствующие лекции можно найти в реализации ThreadCSO. [7]
  • Для С++:
    • плита [8] Эта реализация поддерживает разбиение, а также различные операции слияния и сжатия. К отдельным узлам могут быть прикреплены разные исполнители.

Ссылки [ править ]

  1. ^ «Руководство по программированию XMOS | XMOS» . Архивировано из оригинала 4 марта 2016 г. Проверено 10 мая 2015 г.
  2. ^ «Эффективный Go — язык программирования Go» .
  3. ^ «Каналы — ржавчина на примере» . doc.rust-lang.org . Проверено 28 ноября 2020 г.
  4. ^ « Фьючерсы , заархивированные 4 декабря 2020 г. в Wayback Machine », Языковые шаблоны Go, заархивированные 11 ноября 2020 г. в Wayback Machine.
  5. ^ « Итераторы , заархивированные 15 октября 2020 г. в Wayback Machine », Шаблоны языка Go , заархивированные 11 ноября 2020 г. в Wayback Machine.
  6. ^ Суфрин, Бернард (13 июля 2021 г.), ThreadCSO (PDF) , получено 17 февраля 2023 г.
  7. ^ Суфрин, Бернард (13 июля 2021 г.), ThreadCSO , получено 17 февраля 2023 г.
  8. ^ «stlab — это продолжающаяся работа того, что раньше называлось Лабораторией программных технологий Adobe. Библиотеки исходного кода Adobe (ASL), библиотеки платформ и новые библиотеки stlab размещены на github» . 31 января 2021 г.

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: 58B39F60CD8A372D2E26246A55ECEE34__1716055440
URL1:https://en.wikipedia.org/wiki/Channel_(programming)
Заголовок, (Title) документа по адресу, URL1:
Channel (programming) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)