Эквивалент канала Go в Java: мультиплексирование исходных данных
Чтобы справиться с ситуацией, когда несколько BlockingQueues требуют мониторинга, но без создания нескольких потоков чтения, ценен механизм, аналогичный каналу Go и выбору. В Java библиотека JCSP предлагает функциональный эквивалент.
Альтернатива JCSP: аналог Go Select
Альтернатива JCSP эквивалентна оператору select в Go. Это позволяет потоку-потребителю переключаться на несколько входных каналов без необходимости их опроса. Это обеспечивает эффективное мультиплексирование исходных данных, избегая ненужных циклов, даже если в некоторых очередях нет данных.
Реализация JCSP
Пример использования альтернативы JCSP для справедливого мультиплексирования ввода каналы представлены ниже:
import org.jcsp.lang.*; public class FairPlex implements CSProcess { private final AltingChannelInput[] in; private final ChannelOutput out; public FairPlex (final AltingChannelInput[] in, final ChannelOutput out) { this.in = in; this.out = out; } public void run () { final Alternative alt = new Alternative (in); while (true) { final int index = alt.fairSelect (); out.write (in[index].read ()); } } }
Избежание взаимоблокировок
Как и в Go, программы Java, использующие каналы, должны быть тщательно спроектированы, чтобы избежать взаимоблокировок. Формальный анализ библиотеки JCSP подтверждает ее канал и альтернативную реализацию, обеспечивая надежность и отсутствие взаимоблокировок.
Примечание
Последней стабильной версией JCSP является версия 1.1-rc5, не та версия, которая указана на сайте.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3