读一本书,最好能从它的前言开始。那么我们就来看看《Java编程思想》作者 Bruce Eckel 在前言里都说了些什么吧。

01、Java 的核心目的是“为程序员减少复杂性”。

James Gosling 创建 Java 语言的初衷是:“减少开发健壮代码所需的时间和困难”。尽管这个目标导致 Java 的运行效率偏慢,但与用 C++ 开发相同的程序相比,Java 只需要一半甚至更少的时间。

作为程序员,这是我们希望看到的。少敲代码省下来的那一部分时间,可以约个妹子去看场电影,放松一下,对吧?况且,Java 一直在更新,性能也不断地被优化。

记得上大学那会,我们专业只有两个班,一个班学 Java,一个班级学 C++。结果大学毕业后,C++ 的同学几乎都转了行,有些同学反馈说因为 C++ 的指针太飘忽不定了,难学难懂难掌握(C++ 表示不服,怎么能这样莫名其妙地泼脏水呢)。

02、并发编程确实很难。

Bruce Eckel 吐露心声说自己也曾深陷“并发”泥潭,但经过“数月的努力,还是走了出来”。所以,各位,千万不要丧失驾驭并发编程的信心啊,尽管并发编程是真的难。

并发是什么呢?通常情况下,并发是指“系统能够同时并行处理很多请求”。我们来看一下并发常用的一些指标。

1)响应时间(Response Time):系统从接收请求到做出回应所花费的时间。

2)吞吐量(Throughput):单位时间内处理的请求数量。最明显的例子就是高速通道上的 ETC 和普通车道,显然 ETC 的吞吐量更大,因为不需要在进站的时候从窗口取卡,在出站的时候还卡缴费。

3)并发用户数:同时承载正常使用系统功能的用户数量。

如何提升系统的并发能力呢?

1)提升单机硬件配置。比如说增加 CPU 核数(从 2 个到 4 个,从 4 个到 8 个),升级网卡到万兆,升级硬盘为 SSD(固态硬盘,比普通硬盘读写更快、质量更轻、能耗更低、体积更小),扩充系统内存(从 64G 到 128G)。

2)改善单机架构配置。比如使用内存读写而不是每次都读写数据库。

3)增加服务器数量。单机性能总是有极限的,但服务器集群数量可以很庞大。

好了,本篇文章到此就要结束了。我从《Java 编程思想》的前言里读到了以上这些内容,你呢?

上一篇:对《Java编程思想》读者的一点建议

下一篇:Java 的核心目的和并发编程

PS:微信搜索「沉默王二」公众号,关注后回复关键字「Java 编程思想」即可获取本书的电子版(高清带书签)。强烈大家购买纸质版,读起来不费眼。

Java 的核心目的和并发编程的更多相关文章

  1. Java基础篇——线程、并发编程知识点全面介绍(面试、学习的必备索引)

    原创不易,如需转载,请注明出处https://www.cnblogs.com/baixianlong/p/10739579.html,希望大家多多支持!!! 一.线程基础 1.线程与进程 线程是指进程 ...

  2. ☕【Java技术指南】「并发编程专题」针对于Guava RateLimiter限流器的入门到精通(含实战开发技巧)

    并发编程的三剑客 在开发高并发系统时有三剑客:缓存.降级和限流. 缓存 缓存的目的是提升系统访问速度和增大系统处理容量. 降级 降级是当服务出现问题或者影响到核心流程时,需要暂时屏蔽掉,待高峰或者问题 ...

  3. 深入理解java:2.3.4. 并发编程concurrent包 之容器ConcurrentLinkedQueue(非阻塞的并发队列---循环CAS)

    1.    引言 在并发编程中我们有时候需要使用线程安全的队列. 如果我们要实现一个线程安全的队列有两种实现方式:一种是使用阻塞算法,另一种是使用非阻塞算法. 使用阻塞算法的队列可以用一个锁(入队和出 ...

  4. cocos2d-x游戏引擎核心之十一——并发编程(消息通知中心)

    [续] cocos2d-x游戏引擎核心之八——多线程 这里介绍cocos2d-x的一种消息/数据传递方式,内置的观察者模式,也称消息通知中心,CCNotificationCenter. 虽然引擎没有为 ...

  5. 深入理解java:2.3.6. 并发编程concurrent包 之管理类---线程池

    我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁 ...

  6. 深入理解java:2.3.2. 并发编程concurrent包 之重入锁/读写锁/条件锁

    重入锁 Java中的重入锁(即ReentrantLock)   与JVM内置锁(即synchronized)一样,是一种排它锁. ReentrantLock提供了多样化的同步,比如有时间限制的同步(定 ...

  7. ☕【Java技术指南】「并发编程专题」Fork/Join框架基本使用和原理探究(基础篇)

    前提概述 Java 7开始引入了一种新的Fork/Join线程池,它可以执行一种特殊的任务:把一个大任务拆成多个小任务并行执行. 我们举个例子:如果要计算一个超大数组的和,最简单的做法是用一个循环在一 ...

  8. 深入理解java:2.3.1. 并发编程concurrent包 之Atomic原子操作(循环CAS)

    java中,可能有一些场景,操作非常简单,但是容易存在并发问题,比如i++, 此时,如果依赖锁机制,可能带来性能损耗等问题, 于是,如何更加简单的实现原子性操作,就成为java中需要面对的一个问题. ...

  9. 🏆【Java技术专区】「并发编程专题」教你如何使用异步神器CompletableFuture

    前提概要 在java8以前,我们使用java的多线程编程,一般是通过Runnable中的run方法来完成,这种方式,有个很明显的缺点,就是,没有返回值.这时候,大家可能会去尝试使用Callable中的 ...

随机推荐

  1. 使用Gin+WebSocket在HTML中无插件播放RTSP

    在后台的开发中遇到了对接显示摄像头视频流的需求.目前获取海康及大华等主流的摄像头的视频流使用的基本都是RTSP协议.不过HTML页面并不能直接播放RTSP协议的视频流,查询了一番各种网页播放RTSP的 ...

  2. 使用where 过滤数据

    --本章主要内容是MySQL中使用where搜索条件进行过滤数据. where条件在from子句后面给出,如下所示: select name,price from shops where price& ...

  3. 《Java基础知识》流程控制

    流程控制分类: 一.顺序结构如果没有流程控制(即没有分支结构和循环结构),Java方法里面的语句是一个顺序执行流,从上到下依次执行每条语句. 二.分支结构1.if语句if语句使用布尔表达式或者布尔值作 ...

  4. go 利用chan的阻塞机制,实现协程的开始、阻塞、返回控制器

    一.使用场景 大背景是从kafka 中读取oplog进行增量处理,但是当我想发一条命令将这个增量过程阻塞,然后开始进行一次全量同步之后,在开始继续增量. 所以需要对多个协程进行控制. 二.使用知识 1 ...

  5. CentOS7.2下部署zabbix4.0

    整体部署采用centos7+php+apache+mariadb 基础环境配置优化 1. 关闭防火墙 [root@monitor_53 ~]$ systemctl stop firewalld [ro ...

  6. Nginx优化之一

    一.Nginx安全优化 1.1:隐藏nginx版本信息 官方配置参数说明:http://nginx.org/en/docs/http/ngx_http_core_module.html#server_ ...

  7. ajax添加请求头(添加Authorization字段)

    我们在发AJAX请求的时候可能会需要自定义请求头,在jQuery的$.ajax()方法中提供了beforeSend属性方便我们进行此操作. beforeSend: function(request) ...

  8. [译]C# 7系列,Part 4: Discards 弃元

    原文:https://blogs.msdn.microsoft.com/mazhou/2017/06/27/c-7-series-part-4-discards/ 有时我们想要忽略一个方法返回的值,特 ...

  9. 初学Manjaro

    近期,看有朋友在使用Manjaro系统,感觉这个系统挺不错,于是我也安装了Manjaro,学习一下!!!! Manjaro下载地址:https://manjaro.org/download/ Manj ...

  10. 针对base64编码和URIEncode的一点研究

    Base64编码的作用 将任意的二进制比特串编码成由ASCii码中的64个可显示字符组成的字符串. 为什么需要base64编码? 所有的文件,本质上都是0.1组成的比特串,文本文件.二进制文件的区别只 ...