受到像Akka和Quasar这样的图书馆的启发,我开始想知道这些实际上是如何起作用的#34;引擎盖下#34;我意识到它很可能非常复杂,并且它们彼此之间的工作方式完全不同。
我仍然想学习如何实现(最多)我自己的基本版本"事件驱动的轻量级线程"使用Java 8。
我非常熟悉Akka作为库,我对JVM上的并发有一个中间的了解。
有人能指出我的一些文献,或试着描述所涉及的概念吗?
答案 0 :(得分:2)
在Akka,它的工作原理如下:
ActorRef.tell(msg)
时,msg
会被放入引用的actor的邮箱中(但是,这不足以运行任何代码)akka.actor.throughput
中指定的计数,由此一项任务一次处理。如果邮箱之后仍然有消息,则会在调度程序上安排另一个任务来处理剩余的消息。之后任务退出。这确保了公平性,即运行此邮箱的线程不会被一个参与者无限期阻止。因此,基本上有两个工作队列:
有效写这篇文章最困难的部分是线程池。在线程池中,一堆工作线程需要以有效的方式访问其任务队列。默认情况下,Akka使用JDK的ForkJoinPool,这是一个非常复杂的工作窃取线程池实现。
答案 1 :(得分:1)
有人能指出我的一些文献,
我是Chronicle Queue的架构师,您可以在我的博客上阅读它的使用方式和工作原理https://vanilla-java.github.io/tag/Microservices/
尝试描述所涉及的概念?
你有;
对于我工作的某些系统,您可以在Java中实现30微秒的延迟(网络数据包输出到网络数据包)
答案 2 :(得分:1)
在Akka,
1.Actor系统将线程池中的线程分配给有要处理消息的actor。
2.当actor没有要处理的消息时,线程被释放并分配给其他有消息要处理的actor
这种方式异步actor系统可以处理很多 具有相同数量的资源的更多并发请求 有限数量的线程(线程池)在等待I / O时永远不会处于空闲状态 完成的操作。
有关详细信息,您可以下载&查看此电子书https://info.lightbend.com/COLL-20XX-Designing-Reactive-Systems_RES-LP.html?lst=BL&_ga=1.214533079.1169348714.1482593952