当前位置: 首页 > 网络应用技术

理事会和频道(CSP:Kotlin,Golang)

时间:2023-03-09 10:45:28 网络应用技术

  众所周知,很难用共享状态编写代码并犯错误。试图通过通信信息简化这一点,而不是使用通用的半透明共享信息。Coroutine可以通过频道相互通信。

  CSP,交流顺序过程。

  CSP模型是在1970年代提出的。它通过共享通信通道(管道)描述了两个独立并发实体的并发症模型。

  CSP注意“以通信方式共享记忆”。

  不要通过共享记忆来交流;而是通过通信共享内存。

  普通线程并发模型就像Java,C ++或Python一样。它们之间的通信是通过共享内存执行的。一种非常典型的方法是访问共享数据(例如数组,地图或结构或对象),并通过锁定。因此,在许多情况下,可以方便地操作的数据结构称为“线程安全数据结构”。例如,Java.Go提供的“ Java.util.concurrent”中的数据结构也可以实现传统的线程并发模型。

  管道和共享内存之间有很大的区别。内存共享是通过内存共享内存,而管道通过通信共享内存。因此,管道通信要比内存共享高得多。

  Coroutine可以通过管道实现数百万的并发性。如果扣押线程,则coroutine是协作的。在Coroutine中,它也通过管道安排。

  该线程在调度之前占用CPU和内存,Coroutine是通过通信来调度信号。Coroutine通过管道。由于Coroutine的消耗量比线程小得多,因此可以实现数百万的并发性。

  在Coroutine中,IO在大多数情况下与CPU无关。这是管道带来的优势。它不需要长时间锁定内存或进行调度。Council具有以下特征:

  Golang在其运行时使用基于公共迁移的加载计划来优化资源利用率。

  在图中,G0,G1 ... G9是在带有2个处理器P0和P1的2核机上运行的goroutines。上下文中的系统具有全局队列,其中有4个goroutines排队。

  Golang通过在Goroutine中提供语言级别的时间表来实现高效率M:N线程相应的关系,如下图所示

  阐明:

  为了安排计划的公平性,Golang将窃取工作算法添加到调度程序中。处理队列的处理后,它将首先在全局执行队列中窃取grocess.glore g在执行队列中进行处理。

  GO的CSP并发模型是通过Goroutine和Channel实现的。

  生成Goroutine的方法非常简单:Go并生成它。

  通信机构渠道也非常方便。据说使用通道<-DATA传递数据,并且数据用于使用<-Channel。

  在通信过程中,数据渠道<-DATA和数据<-Channel的数据将不可避免地出现,因为这里将在两个Goroutine之间进行通信。

  无论是通过还是采取,它都必须被阻止,直到另一个Goroutine通过或被抓住。

  该频道是通信原件,它使我们能够在不同的coroutines之间传递数据。

  一个Coroutine可以将一些信息发送到频道,另一个可以从频道接收此信息:

  发送(生产)信息的理事会通常称为生产者,并且接收(消费者)信息的协会被称为消费者。当需要时,许多Coroutines可以将信息发送到同一渠道,许多公司可以从中接收信息:

  请注意,当许多Coroutines从同一渠道接收信息时,每个元素仅由一位消费者处理;自动处理意味着从通道删除此元素。

  我们可以考虑一个类似于元素的通道(直接仿真将是一个队列:元素被添加到一端并从另一端接收)。但是,有一个重要的区别:与集合不同,即使在其同步版本中,可以暂停并接收操作。这是当通道为空或已过期时发生(通道的大小可能受到限制,然后可能已满)。

  频道通过三个不同的接口说:SendChannel,ReceiveChannel和频道扩展了前两个接口。您通常创建一个频道并将其作为SendChannel实例提供给生产者,以便只有它们才能将其发送给它并作为ReceiveChannel实例提供它对于消费者,只有他们才能从中获得它。请注意,发送和接收方法被称为中止:

  管道使用示例

  管道类型

  该频道不是胚胎,否则会悬挂。

  当消费者试图从空通道接收并被暂停直到将一些新元素发送到此频道时,出现。

  然后,然后

  “ Rendezvous”名称(“在商定的时间和地点的会议”)是指发送和接受的面孔应“按时开会”。

  发送到混合通道的一个新元素将覆盖先前发送的元素,因此接收到最新元素。

  https://play.kotlinlang.org/hands-n/introduction%20to%20coroup

  https://medium.com/swlh/coroutines-pilove- notes-cb83654a8888d4444444

  https://itnext.io/load-balancing-goroutines-n-go-57e0896c7f86

  原始:https://juejin.cn/post/7095263465350103047