并发已不再是语言层面上的事情了
本文将并发和内存管理做了个类比。最近有一个说法是因为现代工程师几乎总是面对计算机集群编程,所以我们需要用于构建分布式系统的工具。这就意味着我们需要在语言层面支持分布式系统开发。像GO和Erlang这样的语言其优势正好符合这个观点。
GO和Erlang可能最终会流行,但我不认为是这个原因。分布式系统开发并不会成为每个应用开发者日常工作的一部分,因为那将会是件非常痛苦的事情。在某种程度上,我想今天发生的事情是因为缺乏良好的分布式计算框架,而迫使应用去重新实现一些分布式系统原语。但这种情况不会一直存在,而必将有一些框架提供不同的编程模型,在弹性机器池上处理分布和并发问题。
MapReduce已经解决了这个问题。MapReduce编程几乎都是单线程的,并发是由框架来管理,另外有助于你写好MapReduce程序的原因是,有很多用户级别(user-level)的并发原语,并且MapReduce是高度并行的。
这不是个新事物,即使是Java servlets,其所有的缺陷主要是因为抽象了线程模型,但是至少对于应用程序来说只需要通过阻塞I/O与一个数据库进行交互。
我觉得有三大基本领域需要处理:在线,近实时和离线。
- 在线领域,我们创建请求/响应式服务,并行性是通过将每个请求的处理当作一个工作单元,划分到不同的线程和机器。我见过该模型的多个变种,从“服务查询语言”到将REST调用拼接在一起的DSLs,它们的共同点就是抽象并发的处理,而不需要像线程一样直接访问单个服务器的并发机制。
- 在近实时处理领域,流处理框架做的很好,通过异步处理而根本不用考虑并发。而且你关心的并发和并行只在框架层面,你写的代码看起来完全是单线程的。
- 离线领域似乎为了不同的目标朝着YARN框架 (校对注:YARN框架介绍)的方向发展。
几乎所有这些框架的共同点是它们都不需要用户直接管理并发。
我认为这些高层次的领域(在线,异步和离线)将被证明会长期存在,但是我不认为我们需要十几个基础分布式计算框架来涵盖这些领域。
这让我花了很多时间来思考,在语言层面支持单机并发(软件事务内存和其他)效果是有限的。它只会帮助框架的实现者而不是最终用户。相比应用开发者,框架实现者会有一些非常不同的需求,他们更关心性能和细粒度的控制。尽管这显然是一个有争议的说法,我不确定线程和锁对框架开发者来说是否是一个可行的模型,毕竟,对于一个受训过的团队它们做的非常好,并有出色的性能和控制能力。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
并发网系列文章集
JAVA: Java视角理解系统结构 Java 7: 全面教程 Java8初体验系列文章 Java ByteCode Java字节码浅析 Java Virtual Machine JVM实用参数系列 JVM性能优化 Java Virtual Machine Concurrency Java虚拟机并发编程 Java Memory Model 深入理解java内存模型 Java内存模型Cookbook-前言 Java内存模型FAQ 同步和Java内存模型 Java Concurrency Java 7 并发编程指南 Java并发性和多线程介绍 Mechanical Sympathy 译文 Oracle官方并发教程 聊聊并发系列文章 Doug Lea并发编程文章 并发数据结构 C++11 并发编程指南 Java Networking Java网络教程 Java NIO Java NIO 系列教程 Java Framework: J.U.C并发框架 Java Fork Join 框架 The j.u.c Synchronizer Framework中文翻译版 Google Guava官方教程 ...
- 下一篇
5月23日云栖精选夜读:阿里云容器服务-高可用Kubernetes部署指南
Kubernetes是非常流行的容器管控技术,为了让Kubernetes可以更深度集成阿里云的计算、存储和网络服务,以提供更佳的性能和网络特性支持,阿里云容器服务团队为Kubernetes提供了基于阿里云服务的CloudProvider插件。 同时,基于阿里云资源编排服务ROS的应用部署能力,阿里云用户可以非常方便的快速部署Kubernetes集群。本文接下来会详细介绍部署过程。 热点热议 阿里云容器服务-高可用Kubernetes部署指南 作者:升功 发表在:阿里云容器服务 阿里云文件存储SMB协议服务及其申请和使用指南 作者:nas-hz 发表在:阿里云存储服务 HBase thrift/thrift2 使用指南 作者:runtimeerror 知识整理 Java基本数据类型包装类 作者:ritit Java 基本数据类型 作者:ritit Java基本数据类型的装换 作者:ritit 一入侯门“深”似海,深度学习深几许(入门系列之一) 作者:【方向】 人工“碳”索意犹尽,智能“硅”来未可知(深度学习入门系列之二) 作者:【方向】 美文回顾 GPU资源的监控和报警_支撑高效深度学习...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS8安装Docker,最新的服务器搭配容器使用
- 设置Eclipse缩进为4个空格,增强代码规范
- Red5直播服务器,属于Java语言的直播服务器
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS7,8上快速安装Gitea,搭建Git服务器