code the life
文章   段子   关于   友链   站内搜索  

最新文章
mac mvn 编译 找不到JDK
IDEA 远程调试
scala Future和Promise
Scala reduceLeft和reduceRight
scala 表达式
Scala大小括号的区别
scala for yield
大数据存储架构简介
minio搭建
MAC 安装 wget

更多文章...     热门文章     文章分类

最新段子
元宇宙的基本组成  傻子和骗子 ?
每一个 Actor 由状态(State)、行为(Behavior)和邮箱(MailBox 消息队列)三部分组成
事件驱动,可以简单理解为线程级的消息中间件
Actor 之间不共享数据,只通过消息沟通
Scala之父Martin Odersky 曾表示会在2016简化Scala语言,降低初学者门槛
面向过程 面向对象 函数式 都是扯,现在是面向工资编程
Scala原生的Actor并不是一套完整的并发解决方案,
不适用于生产环境,比如错误恢复,状态持久化等,
在较新版本的Scala类库中,Akka包已经取代了原生的Actor
某投行上了一个项目,成立了一个新team,
把原来用Java写的系统,用Scala和Akka重写了,
以前跑一个小时跑出来的结果,现在需要跑一天多了
Akka是在线程基础上实现调度的,但线程是有限的,所以Akka的Actor中要避免任何阻塞操作,
要么用Akka提供的异步框架,要么通过Future-callback机制,转换成回调模式。
而Goroutine是用户态线程,创建和切换成本比较小,可以把异步的callback机制转换为同步模式
如何解决多个线程同时修改同一块内存的问题,Java的解决方案是使用synchronized关键字,只允许一个线程修改,其他线程等待,但是当并发量上来后影响性能,因为等待的线程无事可做。
Scala的解决方案是使用akka,把所有的修改请求放到一个mailbox里,然后立刻返回,每个对象有一个专属的线程来应用这些修改。
这样通过异步通信的方式解放了调用线程。但是并发量小的时候没有必要。
Nodejs还有Vert.x的方案跟Scala很像,但是不需要建立一个个的actor,而是提供回调函数,在修改完成后执行,这样容易形成callback hell,导致逻辑支离破碎。
于是就出现了coroutine,可以使用同步的代码风格写出异步执行的代码,比如C#的aync/await关键字就属于这一类
Put productivity & creativity back in the hands of developers
让生产力和创造力回到开发者手中
一门编程语言是否好玩有趣,能否激起创作欲,是最关键的,这比语言风格、运行速度、工具支持、社区文化都来得重要
其实最重要的是生态
穷则独善其身,达则兼济天下 
fuck the world if you're rich, otherwise fuck yourself
更多段子...
访问量 1805905
浙ICP备18041652号-1
浙公网安备 33011002013572号