Scala Actor 并发编程模型 Actor并发编程模型,是 Scala 提供的一直与 Java 完全不一样的并发编程模型,是一直基于事件模型的并发机制。Actor并发编程模型是一种不共享数据,依赖消息传递的并发编程模型,有效避免了资源争夺、死锁等现象。
Actor是一种基于事件(消息)的并发编程模型,不共享数据,有效避免了共享数据加锁问题。
Java并发编程对比 Actor 并发编程模型
Java并发编程
Actor 并发编程模型
共享数据锁模型(share data and lock)
share nothing
每个 object 都有一个monitor,用来监视对共享数据的访问
不共享数据,Actor直接通过Message通讯
加锁代码使用synchronized标识
死锁问题
每个Actor内部是顺序执行的
每个线程内部是顺序执行的
每个Actor内部是顺序执行的
Scala 在 2.11 及之后的版本中加入了Akka并发编程框架,Actor并发编程模型已经被废弃了。
创建 Actor可以通过类(Class)或者单例对象(O ...
通过 Akka 构建简单的 Spark 通信框架实现思路:
构建Master、Worker阶段
构建 Master ActorSystem、 Actor
构建 Worker ActorSystem、 Actor
Worker注册阶段
Worker进行向Master注册(将自己的ID、CPU 核数、内存大小(MB)发送给 Master)
Worke定时发送心跳阶段
Worke定期向Master发送心跳消息
Master定时心跳检测阶段
Master定期检测Worker心跳,将一些超时的Worker移除,并对Worker按照内存进行倒序排列
多个Worker测试阶段
启动多个Worker,查看是否能注册成功,并停止某个Worker查看是否能正常移除
Java 多线程-认真学习版线程相关概念进程
进程指定的运行中的程序,操作系统会为进程分配内存空间
进程是程序的一次执行过程,或者说是一个正在运行的程序。这个进程有它自己的生命周期,产生、存在、销毁的过程
在这里IDEA程序就是一个进程
线程
线程是由进程创建的,是进程的一个实体
一个进程可以拥有多个线程
我们可以看到在IDEA整个进程中有 142 个线程
线程的一些补充概念
单线程: 在一个时刻,只允许执行一个线程
多线程: 同一时刻可以执行多个线程,这里如上图所示,IDEA就是一个多线程应用
并发: 同一时刻,多个任务交替执行,单核 CPU 实现的多任务处理就是并发
并行: 同一时刻,多个任务同时执行。多核 CPU 才能实现并行。
12345678public class CpuNum { public static void main(String[] args) { // 获取挡圈端脑 CPU 数量 Runtime runtime = Runtime.getRuntime(); int cpuNu ...
Java IO流-认真学习版什么是文件和文件流文件是保存数据的地方文件流: 文件在程序中是以流的形式来操作的
流: 数据在数据源(文件)和程序(内存)之间的路径输入流: 数据从数据源(文件)到程序(内存)之间的路径输出流: 数据从程序(内存)到数据源(文件)之间的路径
常用文件操作创建文件对象相关构造器和方法
new File(String pathname)根据路径构建一个File对象
new File(File parent, String child)根据父目录文件 + 子路径构建
new File(String parent, String child)根据父目录 + 子路径构建
createNewFile创建新文件
这里的flie对象,在 Java 程序中只是个对象,只有执行了createNewFile方法才会真正的在磁盘创建该文件
方式一、根据路径构建一个File对象12345678String filePath = "/Volumes/Code/IdeaProjects/java-IO-learn/src/main/java/com/chongyan/fi ...
通过 Docker搭建一个小而美的网站流量监控——Umami创建对应的目录123cd ~mkdir -p ~/data/docker_data/umamicd ~/data/docker_data/umami
编写docker-compose配置文件1vim docker-compose.yml
12345678910111213141516171819202122232425---version: '3'services: umami: image: ghcr.io/mikecao/umami:postgresql-latest ports: - "3000:3000" environment: DATABASE_URL: postgresql://umami:umami@db:5432/umami # 这里的数据库和密码要和下方你修改的相同 DATABASE_TYPE: postgresql HASH_SALT: replace-me-with-a-random-string ...
通过 Docker Compose 搭建 Kafka 单机版docker-compose-single-kafka.yml12345678910111213141516171819202122232425262728293031version: '2'services: zookeeper: image: wurstmeister/zookeeper container_name: "zk-kafka" ports: - "2181:2181" kafka: image: wurstmeister/kafka container_name: "kafka-single" ports: - "9092:9092" environment: # client 要访问的 broker 地址 KAFKA_ADVERTISED_HOST_NAME: 127.0.0.1 # 通过端口连接 zookeepe ...
通过 Docker Compose 搭建 ClickHouse 单机版docker-compose-single-clickhouse.yml1234567891011121314151617181920212223242526version: '3'services: clickhouse: image: yandex/clickhouse-server container_name: clickhouse restart: always networks: - deng ports: - "8123:8123" - "9000:9000" volumes: # 默认配置 - ./data/config/docker_related_config.xml:/etc/clickhouse-server/config.d/docker_related_config.xml:rw - ./data/config/config.xml: ...
Centos 7.9 安装 Docker1. 卸载之前安装的 Docker 版本1234567891011yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine \ docker-ce
2. 安装 Docker2.1 安装 yum 相关依赖123yum install -y yum-utils \ device- ...