中文版 Apple 官方 Swift 教程《The Swift Programming Language》
2021年09月11日
2021年09月11日
2021年09月11日
数据结构和算法在计算机科学里,有非常重要的地位。此系列文章尝试使用 Golang 编程语言来实现各种数据结构和算法,并且适当进行算法分析。
联系作者:
Github: https://github.com/hunterhug
知乎:https://www.zhihu.com/people/chen-xing-xing-57-62-13
系列文章首发于:https://goa.lenggirl.com。
联系作者:
Github: https://github.com/hunterhug
知乎:https://www.zhihu.com/people/chen-xing-xing-57-62-13
系列文章首发于:https://goa.lenggirl.com。
2021年09月27日 Golang 语言提供了 go 关键字,以及名为 chan 的数据类型,以及一些标准库的并发锁等,我们将会简单介绍一下并发的一些概念,然后学习这些 Golang 特征知识。
Java 是由 Sun Microsystems 公司于 1995 年 5 月推出的高级程序设计语言,Java 当初诞生的时候,正是上世纪 90 年代末互联网兴起的时代,在企业应用开发中存在几个问题,一是以 IBM,SUN 和 HP 的 UNIX 服务器和大型机为主的异构环境,C/C++ 和其它语言编写的应用跨平台支持和移植比较困难,二是基于 CGI 和其它技术的网络应用从开发效率和功能性角度来看都不够理想,三是 C/C++在当时是主流编程语言,门槛高、易出错、对经验要求很高,而 Java 简单易学、安全可靠,并且一次编写到处运行,再加上 Applet、Servlet 和 JSP 技术,解决了这些痛点,满足了当时互联网程序设计和运维的要求,伴随着互联网的发展一下子就脱颖而出并长期占据主流地位。
2021年09月30日 线程多起来的话就需要管理,不然就会乱成一锅。我们知道线程在物理上对应的就是栈里面的一段内存,存放着局部变量的空间和待执行指令集。如果每次执行都要从头初始化这段内存,然后再交给 CPU 执行,效率就有点低了。假如我们知道该段栈内存会被经常用到,那我们就不要回收,创建完就让它在栈里面呆着,要用的时候取出来,用完换回去,是不是就省了初始化线程空间的时间,这样是我们搞出线程池的初衷。
其实线程池很简单,就是搞了个池子放了一堆线程。既然我们搞线程池是为了提高效率,那就要考虑线程池放多少个线程比较合适,太多了或者太少了有什么问题,怎么拒绝多余的请求,除了异常怎么处理。首先我们来看跟线程池有关的一张类图。
其实线程池很简单,就是搞了个池子放了一堆线程。既然我们搞线程池是为了提高效率,那就要考虑线程池放多少个线程比较合适,太多了或者太少了有什么问题,怎么拒绝多余的请求,除了异常怎么处理。首先我们来看跟线程池有关的一张类图。
2021年09月30日 RxJava 是 JVM 的响应式扩展(ReactiveX),它是通过使用可观察的序列将异步和基于事件的程序组合起来的一个库。
2021年09月30日 Akka 是一个建立在 Actors 概念和可组合 Futures 之上的并发框架, Akka 设计灵感来源于 Erlang;Erlang 是基于 Actor 模型构建的。它通常被用来取代阻塞锁如同步、读写锁及类似的更高级别的异步抽象。Netty 是一个异步网络库,使 Java NIO 的功能更好用。Akka 针对 IO 操作有一个抽象,这和 netty 是一样的。使用 Akka 可以用来创建计算集群,Actor 在不同的机器之间传递消息。从这个角度来看,Akka 相对于 Netty 来说,是一个更高层次的抽象
Akka 是一种高度可扩展的软件,这不仅仅表现在性能方面,也表现在它所适用的应用的大小。Akka 的核心,Akka-actor 是非常小的,可以非常方便地放进你的应用中,提供你需要的异步无锁并行功能,不会有任何困扰。你可以任意选择 Akka 的某些部分集成到你的应用中,也可以使用完整的包——Akka 微内核,它是一个独立的容器,可以直接部署你的 Akka 应用。随着 CPU 核数越来越多,即使你只使用一台电脑,Akka 也可作为一种提供卓越性能的选择。Akka 还同时提供多种并发范型,允许用户选择正确的工具来完成工作。
Akka 是一种高度可扩展的软件,这不仅仅表现在性能方面,也表现在它所适用的应用的大小。Akka 的核心,Akka-actor 是非常小的,可以非常方便地放进你的应用中,提供你需要的异步无锁并行功能,不会有任何困扰。你可以任意选择 Akka 的某些部分集成到你的应用中,也可以使用完整的包——Akka 微内核,它是一个独立的容器,可以直接部署你的 Akka 应用。随着 CPU 核数越来越多,即使你只使用一台电脑,Akka 也可作为一种提供卓越性能的选择。Akka 还同时提供多种并发范型,允许用户选择正确的工具来完成工作。
2021年09月30日 Netty 是一个异步网络库,使 Java NIO 的功能更好用。
2021年09月30日 标准的 Java IO API,你操作的对象是字节流(byte stream)或者字符流(character stream),而 NIO,你操作的对象是 channels 和 buffers。数据总是从一个 channel 读到一个 buffer 上,或者从一个 buffer 写到 channel 上。比如一个线程里,可以从一个 channel 读取数据到一个 buffer 上,在 channel 读取数据到 buffer 的时候,线程可以做其他的事情。当数据读取到 buffer 上后,线程可以继续处理它。
Java NIO 有三个核心组件(core components):Channels、Buffers、Selectors。
Java NIO 有三个核心组件(core components):Channels、Buffers、Selectors。
2021年09月30日 除信号驱动模型外,Java 对其它四种 IO 模型都有支持;其中 Java 最早提供的 blocking IO 即是阻塞 IO,而 NIO 即是非阻塞 IO,同时 NIO 中的 Reactor 模式即是 IO 多路复用模型的实现,通过 AIO 实现的 Proactor 模式即是异步 IO 模型的实现。
Java 中传统的 IO 都是阻塞 IO,比如通过 socket 来读数据,调用 read 方法之后,如果数据没有就绪,当前线程就会一直阻塞在 read 方法调用那里,直到有数据才返回。因此在传统的网络服务设计模式中,比较经典的模式是多线程或线程池。当一条线程正在处理一个 client 的请求时,它是阻塞的状态,这时如果又来了一个 client 的请求,只好再启动一个新的线程去服务它,一个线程的阻塞不会影响其他线程工作。这种服务方式虽然看起来简便,但服务器为每个 client 都启动一个线程,资源消耗非常大。线程池的方式使得线程可以重复使用,在一定程度上减少了创建和销毁线程的系统开销。
多线程(或线程池)模式适用于大部分的连接为短连接的情景。如果大部分的连接都为长连接,而同一时刻只有少数的连接中存在 IO 操作,那么为每一个连接安排一个线程的服务方式是非常浪费的。因此便出现了如下的高性能 IO 模型:采用 Reactor 模式的 Java NIO 模型,这也是 Reactive Programming 中最为重要的概念。
Java 中传统的 IO 都是阻塞 IO,比如通过 socket 来读数据,调用 read 方法之后,如果数据没有就绪,当前线程就会一直阻塞在 read 方法调用那里,直到有数据才返回。因此在传统的网络服务设计模式中,比较经典的模式是多线程或线程池。当一条线程正在处理一个 client 的请求时,它是阻塞的状态,这时如果又来了一个 client 的请求,只好再启动一个新的线程去服务它,一个线程的阻塞不会影响其他线程工作。这种服务方式虽然看起来简便,但服务器为每个 client 都启动一个线程,资源消耗非常大。线程池的方式使得线程可以重复使用,在一定程度上减少了创建和销毁线程的系统开销。
多线程(或线程池)模式适用于大部分的连接为短连接的情景。如果大部分的连接都为长连接,而同一时刻只有少数的连接中存在 IO 操作,那么为每一个连接安排一个线程的服务方式是非常浪费的。因此便出现了如下的高性能 IO 模型:采用 Reactor 模式的 Java NIO 模型,这也是 Reactive Programming 中最为重要的概念。
2021年09月30日 今天在学习CAS的时候,想手写一个CAS的计数器,与JDK中的Atomic(AtomicLong,AtomicInteger等)系列的做个比较,本想性能应该能比JDK要差一丢丢,但却加了一个让线程让出时间片的代码,性能反而更高。
2021年09月30日
2021年09月30日 JSR,全称 Java Specification Requests,即 Java 规范提案,主要是用于向 JCP(Java Community Process)提出新增标准化技术规范的正式请求。每次 JAVA 版本更新都会有对应的 JSR 更新,比如在 Java 8 版本中,其新特性 Lambda 表达式对应的是 JSR 335,新的日期和时间 API 对应的是 JSR 310。当然,本文的关注点仅仅是 JSR 166,它是一个关于 Java 并发编程的规范提案,在 JDK 中,该规范由 java.util.concurrent 包实现,是在 JDK 5.0 的时候被引入的;另外 JDK6 引入 Deques、Navigable collections,对应的是 JSR 166x,JDK7 引入 fork-join 框架,用于并行执行任务,对应的是 JSR 166y。
J.U.C. 即 java.util.concurrent 的缩写,该包参考自 EDU.oswego.cs.dl.util.concurrent,是 JSR 166 标准规范的一个实现;
J.U.C. 即 java.util.concurrent 的缩写,该包参考自 EDU.oswego.cs.dl.util.concurrent,是 JSR 166 标准规范的一个实现;
2021年09月30日
2021年09月30日 服务 Service 的正常生命周期是:Service.State.NEW 到 Service.State.STARTING 到 Service.State.RUNNING 到 Service.State.STOPPING 到 Service.State.TERMINATED。已停止的服务无法重新启动。如果服务在启动、运行或停止的地方失败,它将进入 Service.State.FAILED 状态。
2021年09月30日
作者:JsonChao 汇总了各种 Java 基础知识的面试题。
2021年10月30日
2021年10月30日
2021年10月30日
一个处于萌芽阶段的知识库,用于持续分享自己的所见、所学、所思!
作者:heibaiying
博客:https://blog.csdn.net/m0_37809146
作者:heibaiying
博客:https://blog.csdn.net/m0_37809146
2021年12月07日 非原子性协定、计算机多级高速缓存、缓存一致性协议、写缓冲与无效化队列、内存屏障、锁机制、无锁 CAS、线程池
前一页
后一页