读一本书,最好能从它的前言开始。那么我们就来看看《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. leetcode-算法系列-两数之和

    本系列的题目都是出自于"leetcode" 用博客记录是为了加强自己的记忆与理解,也希望能和大家交流更好更优的解题思路. 题目: 给定一个整数数组和一个目标值,找出数组中和为目标值 ...

  2. IIS配置svc(IIS8中添加WCF支持几种方法小结)

    方法一 最近在做Silverlight,Windows Phone应用移植到Windows 8平台,在IIS8中测试一些传统WCF服务应用,发现IIS8不支持WCF服务svc请求,后来发现IIS8缺少 ...

  3. 使用VS进入源码调试

    我的使用的是Visual Studio 2019 原因 学习完一部分东西后,我发现了一个更牛b的东西ABP框架. 所以开始学习ABP框架 https://github.com/aspnetboiler ...

  4. Python提升“技术逼格”的6个方法

    1 列表生成式和生成器 from numpy import randoma = random.random(10000) lst = []for i in a: lst.append(i * i) # ...

  5. Client error attempting to change layout margins of a private view

    从 iOS 11 开始,UINavigationBar 使用了自动布局,左右两边的按钮到屏幕之间会有 16 或 20 的边距. 为了避免点击到间距的空白处没有响应,通常做法是:定义一个 UINavig ...

  6. R语言学习-基础篇1

    ###第一周:R基础 rm(list = ls())  #ctr+L###矩阵相乘,函数diag()a=matrix(1:12,nrow=3,ncol=4)b=matrix(1:12,nrow=4,n ...

  7. Appium(七):Appium API(一) 应用操作

    1. 应用操作 本章所罗列的方法主要针对应用的操作,如应用的安装.卸载.关闭.启动等. 把前面的启动代码放在这里,后面只展示不同的部分. # coding:utf-8 from appium impo ...

  8. ruby中的数组相关方法介绍

    l = ["a","b","c","d","e","f",'g'] puts l ...

  9. 2019 Vue开发指南:你都需要学点啥?

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者.原文出处:https://dzone.com/articles/vue-development-in-2019 ...

  10. CSS transition 的默认值

    语法 transition: property duration timing-function delay|initial|inherit; 示例: div {   width: 100px;    ...