use*_*592 0 java functional-programming scala
嗨:我们正在将Java用于多线程应用程序.我们发现了Java I/O的瓶颈.功能编程,例如scala,有更好的I/O吞吐量吗?我们将拥有许多内核cpu,从这个意义上讲,业务逻辑可以非常快速地处理,但I/O将成为瓶颈.有什么好的解决方案吗?
mer*_*ike 11
由于Scala在Java虚拟机上运行,并且(在引擎盖下)使用Java API进行I/O,因此切换到scala不太可能提供比编写良好的Java代码更好的性能.
至于解决方案,您对问题的描述过于粗略,无法推荐特定的解决方案.
通常当人们抱怨Java IO很慢时,他们正在使用IO做的事情很慢,而不是IO本身.例如,BufferedReader读取文本行(相对较慢)可以读取90 MB/s的CPU/HDD.使用内存映射文件可以使速度更快,但除非您的磁盘驱动器能够处理它,否则它不会产生太大的不同.
您可以采取一些措施来提高IO性能,但很快就会发现获得更快IO的方法是改进硬件.
如果您使用的硬盘驱动器可以保持100 MB/s的读取速度和120 IOPS,那么您将受到这些因素的限制,并使用500 MB/s和80,000 IOPS的SSD替换驱动器将更快.
同样,如果你使用100 Mb/s网络,你可能只能获得12 MB/s,在1 Gb/s网络上你可能获得110 MB/s,在10 Gig-E网络上你可能会很幸运1 GB/s.
如果您正在执行许多微小的I/O操作,那么将它们合并为一个大型I/O操作可以大大加快您的代码速度.函数式编程技术倾向于使数据收集和转换操作更容易编写(例如,您可以在列表中存储待处理输出的项目,并使用map将项目到文本或项目到二进制转换器应用于它们).否则,不,功能编程技术不能克服固有的慢速通道.如果原始I/O速度有限,在Java和其他地方,并且您有足够的硬件线程可用,则每个独立I/O通道应该有一个最高优先级线程,并且只执行I/O(无数据转换,没有).这将最大化您的I/O速率,然后您可以使用其他线程来执行转换和业务逻辑等.
| 归档时间: |
|
| 查看次数: |
649 次 |
| 最近记录: |